geonetwork-ui 2.2.0-dev.2446b017 → 2.2.0-dev.260a7d93
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 +2 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +77 -52
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +16 -11
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +23 -16
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +21 -18
- 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/catalog/src/lib/organisations/organisations.component.mjs +4 -15
- 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/add-layer-from-wms/add-layer-from-wms.component.mjs +63 -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 +26 -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 +6 -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 +7 -4
- 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 +3 -3
- 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 +4 -4
- package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +4 -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 +17 -0
- 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 -16
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +2 -3
- 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 +7 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +16 -4
- 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 +8 -5
- 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/star-toggle/star-toggle.component.mjs +2 -2
- 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 +2 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
- package/esm2022/libs/util/shared/src/lib/utils/fuzzy-filter.mjs +27 -0
- package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
- package/esm2022/translations/de.json +106 -89
- package/esm2022/translations/en.json +42 -25
- package/esm2022/translations/es.json +21 -4
- package/esm2022/translations/fr.json +26 -9
- package/esm2022/translations/it.json +33 -16
- package/esm2022/translations/nl.json +21 -4
- package/esm2022/translations/pt.json +21 -4
- package/fesm2022/geonetwork-ui.mjs +1408 -803
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +1 -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/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -4
- 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 +3 -2
- 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 +15 -15
- 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/catalog/src/lib/organisations/organisations.component.d.ts +0 -1
- package/libs/feature/catalog/src/lib/organisations/organisations.component.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/add-layer-from-wms/add-layer-from-wms.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.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 +16 -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 +5 -4
- 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 +3 -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 +8 -0
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +7 -2
- 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 +13 -11
- 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/dropdown-multiselect/dropdown-multiselect.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 +1 -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/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts +9 -0
- package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts.map +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +22 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +3 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +112 -65
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +19 -12
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +62 -43
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +91 -59
- 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 +17 -18
- 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 +6 -2
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +3 -17
- 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/add-layer-from-wms/add-layer-from-wms.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +55 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +63 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +14 -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 +9 -3
- 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 +12 -4
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -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 -0
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
- package/src/libs/ui/elements/src/index.ts +3 -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 +264 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +1 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +17 -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 +104 -50
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +31 -7
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +1 -2
- 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.ts +4 -0
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +7 -0
- 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/dropdown-multiselect/dropdown-multiselect.component.ts +7 -4
- 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.html +8 -3
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
- 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 +1 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
- package/src/libs/util/shared/src/lib/utils/fuzzy-filter.ts +32 -0
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/translations/de.json +106 -89
- package/translations/en.json +42 -25
- package/translations/es.json +21 -4
- package/translations/fr.json +26 -9
- package/translations/it.json +33 -16
- package/translations/nl.json +21 -4
- package/translations/pt.json +21 -4
- package/translations/sk.json +21 -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';
|
|
@@ -58,6 +58,7 @@ import * as i1$4 from '@angular/material/progress-spinner';
|
|
|
58
58
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
59
59
|
import * as i3 from '@angular/material/tooltip';
|
|
60
60
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
61
|
+
import { marked } from 'marked';
|
|
61
62
|
import EmblaCarousel from 'embla-carousel';
|
|
62
63
|
import * as i1$6 from '@angular/cdk/overlay';
|
|
63
64
|
import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
|
|
@@ -72,10 +73,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|
|
72
73
|
import * as i3$2 from '@angular/material/datepicker';
|
|
73
74
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
74
75
|
import { MatInputModule } from '@angular/material/input';
|
|
76
|
+
import * as basicLightbox from 'basiclightbox';
|
|
75
77
|
import * as i1$8 from '@ngrx/effects';
|
|
76
78
|
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
77
79
|
import tippy from 'tippy.js';
|
|
78
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
|
+
import { Polygon } from 'ol/geom';
|
|
82
|
+
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
79
83
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
80
84
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
81
85
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -645,28 +649,32 @@ function extractStatus() {
|
|
|
645
649
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
646
650
|
}
|
|
647
651
|
// from gmd:resourceConstraints
|
|
648
|
-
function
|
|
649
|
-
|
|
650
|
-
|
|
652
|
+
function extractLegalConstraints() {
|
|
653
|
+
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]) => ({
|
|
654
|
+
...(url && { url }),
|
|
651
655
|
text,
|
|
652
|
-
type: 'other',
|
|
653
656
|
})));
|
|
654
|
-
|
|
657
|
+
}
|
|
658
|
+
// from gmd:resourceConstraints
|
|
659
|
+
function extractSecurityConstraints() {
|
|
660
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
661
|
+
...(url && { url }),
|
|
655
662
|
text,
|
|
656
|
-
type: 'security',
|
|
657
663
|
})));
|
|
658
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
659
664
|
}
|
|
660
665
|
// from gmd:resourceConstraints
|
|
661
|
-
function
|
|
662
|
-
return pipe(
|
|
666
|
+
function extractOtherConstraints() {
|
|
667
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
669
|
+
text,
|
|
670
|
+
})));
|
|
663
671
|
}
|
|
664
672
|
// from gmd:resourceConstraints
|
|
665
673
|
function extractLicenses() {
|
|
666
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
674
|
+
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]) => ({
|
|
667
675
|
...(url && { url }),
|
|
668
676
|
text,
|
|
669
|
-
})))
|
|
677
|
+
})));
|
|
670
678
|
}
|
|
671
679
|
// from gmd:MD_Distribution
|
|
672
680
|
function extractDatasetDistributions() {
|
|
@@ -838,11 +846,14 @@ function readStatus(rootEl) {
|
|
|
838
846
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
839
847
|
}
|
|
840
848
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
841
|
-
function
|
|
842
|
-
return pipe(getConstraints, mapArray(
|
|
849
|
+
function readLegalConstraints(rootEl) {
|
|
850
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
843
851
|
}
|
|
844
|
-
function
|
|
845
|
-
return pipe(getConstraints, mapArray(
|
|
852
|
+
function readSecurityConstraints(rootEl) {
|
|
853
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
854
|
+
}
|
|
855
|
+
function readOtherConstraints(rootEl) {
|
|
856
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
846
857
|
}
|
|
847
858
|
function readLicenses(rootEl) {
|
|
848
859
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
@@ -1075,23 +1086,23 @@ function appendKeywords(keywords, type) {
|
|
|
1075
1086
|
? appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', type)))
|
|
1076
1087
|
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
|
|
1077
1088
|
}
|
|
1078
|
-
function
|
|
1079
|
-
|
|
1080
|
-
// remove legal constraints that *only* have 'otherRestrictions'
|
|
1081
|
-
const otherConstraintsFilter = pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code === 'otherRestrictions'));
|
|
1082
|
-
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray((el) => securityConstraintsFilter(el) || otherConstraintsFilter(el))));
|
|
1083
|
-
}
|
|
1084
|
-
function createAccessConstraint(constraint) {
|
|
1085
|
-
if (constraint.type === 'security') {
|
|
1089
|
+
function createConstraint(constraint, type) {
|
|
1090
|
+
if (type === 'security') {
|
|
1086
1091
|
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))));
|
|
1087
1092
|
}
|
|
1088
|
-
|
|
1093
|
+
else if (type === 'legal') {
|
|
1094
|
+
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))));
|
|
1095
|
+
}
|
|
1096
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1089
1097
|
}
|
|
1090
|
-
function
|
|
1098
|
+
function removeOtherConstraints() {
|
|
1091
1099
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1092
1100
|
}
|
|
1093
|
-
function
|
|
1094
|
-
return pipe(
|
|
1101
|
+
function removeSecurityConstraints() {
|
|
1102
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1103
|
+
}
|
|
1104
|
+
function removeLegalConstraints() {
|
|
1105
|
+
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')))));
|
|
1095
1106
|
}
|
|
1096
1107
|
function removeLicenses() {
|
|
1097
1108
|
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')))));
|
|
@@ -1195,14 +1206,17 @@ function writeKeywords(record, rootEl) {
|
|
|
1195
1206
|
function writeThemes(record, rootEl) {
|
|
1196
1207
|
pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
|
|
1197
1208
|
}
|
|
1198
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1199
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1200
|
-
}
|
|
1201
1209
|
function writeLicenses(record, rootEl) {
|
|
1202
1210
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1203
1211
|
}
|
|
1204
|
-
function
|
|
1205
|
-
pipe(findOrCreateIdentification(),
|
|
1212
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1213
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1214
|
+
}
|
|
1215
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1216
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1217
|
+
}
|
|
1218
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1219
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1206
1220
|
}
|
|
1207
1221
|
function writeUpdateFrequency(record, rootEl) {
|
|
1208
1222
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1300,8 +1314,9 @@ function toModel(xml) {
|
|
|
1300
1314
|
const recordCreated = recordUpdated;
|
|
1301
1315
|
const keywords = readKeywords(rootEl);
|
|
1302
1316
|
const themes = readThemes(rootEl);
|
|
1303
|
-
const
|
|
1304
|
-
const
|
|
1317
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1318
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1319
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1305
1320
|
const licenses = readLicenses(rootEl);
|
|
1306
1321
|
const overviews = readOverviews(rootEl);
|
|
1307
1322
|
// not used yet
|
|
@@ -1329,9 +1344,10 @@ function toModel(xml) {
|
|
|
1329
1344
|
contactsForResource: [],
|
|
1330
1345
|
keywords,
|
|
1331
1346
|
themes,
|
|
1332
|
-
accessConstraints,
|
|
1333
|
-
useLimitations,
|
|
1334
1347
|
licenses,
|
|
1348
|
+
legalConstraints,
|
|
1349
|
+
securityConstraints,
|
|
1350
|
+
otherConstraints,
|
|
1335
1351
|
...(datasetCreated && { datasetCreated }),
|
|
1336
1352
|
...(datasetUpdated && { datasetUpdated }),
|
|
1337
1353
|
lineage,
|
|
@@ -1356,9 +1372,10 @@ function toModel(xml) {
|
|
|
1356
1372
|
contacts,
|
|
1357
1373
|
keywords,
|
|
1358
1374
|
themes,
|
|
1359
|
-
accessConstraints,
|
|
1360
|
-
useLimitations,
|
|
1361
1375
|
licenses,
|
|
1376
|
+
legalConstraints,
|
|
1377
|
+
securityConstraints,
|
|
1378
|
+
otherConstraints,
|
|
1362
1379
|
overviews,
|
|
1363
1380
|
onlineResources,
|
|
1364
1381
|
};
|
|
@@ -1384,9 +1401,11 @@ function toXml(record, originalXml) {
|
|
|
1384
1401
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1385
1402
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1386
1403
|
fieldChanged('themes') && writeThemes(record, rootEl);
|
|
1387
|
-
fieldChanged('
|
|
1404
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1405
|
+
fieldChanged('securityConstraints') &&
|
|
1406
|
+
writeSecurityConstraints(record, rootEl);
|
|
1388
1407
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1389
|
-
fieldChanged('
|
|
1408
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1390
1409
|
if (record.kind === 'dataset') {
|
|
1391
1410
|
writeStatus(record, rootEl);
|
|
1392
1411
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1412,6 +1431,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
|
|
|
1412
1431
|
const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
|
|
1413
1432
|
const toDate = (field) => new Date(field);
|
|
1414
1433
|
const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
|
|
1434
|
+
const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
|
|
1415
1435
|
const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
|
|
1416
1436
|
const getAsUrl = (field, location = window.location.toString()) => {
|
|
1417
1437
|
// an empty string is not a valid url, even though it could be considered an empty path to the root
|
|
@@ -16538,133 +16558,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
16538
16558
|
}]
|
|
16539
16559
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
16540
16560
|
|
|
16541
|
-
// IMPORTANT:
|
|
16542
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
|
|
16543
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16544
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16545
|
-
class TestTranslateLoader extends TranslateLoader {
|
|
16546
|
-
constructor(_translations = {}) {
|
|
16547
|
-
super();
|
|
16548
|
-
this._translations = _translations;
|
|
16549
|
-
}
|
|
16550
|
-
/**
|
|
16551
|
-
* Returns an {Observable} of translations for the specified language. If the
|
|
16552
|
-
* language is not recognized, an empty translations object will be returned.
|
|
16553
|
-
*
|
|
16554
|
-
* @param language the language for which the translations should be retrieved.
|
|
16555
|
-
* @returns the translations for the specified
|
|
16556
|
-
* language or an empty set of translations if the language is not recognized.
|
|
16557
|
-
*/
|
|
16558
|
-
getTranslation(language) {
|
|
16559
|
-
return of(this._translations[language] || {});
|
|
16560
|
-
}
|
|
16561
|
-
}
|
|
16562
|
-
|
|
16563
|
-
// IMPORTANT:
|
|
16564
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
|
|
16565
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16566
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16567
|
-
/**
|
|
16568
|
-
* The TranslateTestingModule provides the {TranslateModule} as well as a
|
|
16569
|
-
* {TranslateService} configured to return translations specific for the
|
|
16570
|
-
* test environment.
|
|
16571
|
-
*
|
|
16572
|
-
* @export
|
|
16573
|
-
*/
|
|
16574
|
-
class TranslateTestingModule {
|
|
16575
|
-
constructor() {
|
|
16576
|
-
this._translations = {};
|
|
16577
|
-
}
|
|
16578
|
-
static withTranslations(languageOrTranslations, translations) {
|
|
16579
|
-
const translateTestingModule = new TranslateTestingModule();
|
|
16580
|
-
if (typeof languageOrTranslations === 'string') {
|
|
16581
|
-
return translateTestingModule.withTranslations(languageOrTranslations, translations);
|
|
16582
|
-
}
|
|
16583
|
-
return translateTestingModule.withTranslations(languageOrTranslations);
|
|
16584
|
-
}
|
|
16585
|
-
get ngModule() {
|
|
16586
|
-
return TranslateTestingModule;
|
|
16587
|
-
}
|
|
16588
|
-
get providers() {
|
|
16589
|
-
const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
|
|
16590
|
-
return [
|
|
16591
|
-
{
|
|
16592
|
-
provide: TranslateService,
|
|
16593
|
-
useValue: translateService,
|
|
16594
|
-
},
|
|
16595
|
-
];
|
|
16596
|
-
}
|
|
16597
|
-
withTranslations(languageOrTranslations, translations) {
|
|
16598
|
-
if (typeof languageOrTranslations === 'string' && translations) {
|
|
16599
|
-
this.addTranslations(languageOrTranslations, translations);
|
|
16600
|
-
this._defaultLanguage = languageOrTranslations;
|
|
16601
|
-
}
|
|
16602
|
-
else if (languageOrTranslations) {
|
|
16603
|
-
Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
|
|
16604
|
-
}
|
|
16605
|
-
return this;
|
|
16606
|
-
}
|
|
16607
|
-
/**
|
|
16608
|
-
* Updates the {TranslationTestingModule} to provide a {TranslateService} that will
|
|
16609
|
-
* use the provided {TranslateCompiler} to translate the test translations.
|
|
16610
|
-
*
|
|
16611
|
-
* @example
|
|
16612
|
-
*
|
|
16613
|
-
* TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
|
|
16614
|
-
* .withCompiler(new TranslateMessageFormatCompiler());
|
|
16615
|
-
*
|
|
16616
|
-
* @param compiler the compiler to use to compile the test translations.
|
|
16617
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16618
|
-
* @memberof TranslateTestingModule
|
|
16619
|
-
*/
|
|
16620
|
-
withCompiler(compiler) {
|
|
16621
|
-
this._compiler = compiler;
|
|
16622
|
-
return this;
|
|
16623
|
-
}
|
|
16624
|
-
/**
|
|
16625
|
-
* Updates the {TranslateTestingModule} to use the provided language as the default language.
|
|
16626
|
-
* By default, the default language will be set to the first language provided.
|
|
16627
|
-
*
|
|
16628
|
-
* @example
|
|
16629
|
-
*
|
|
16630
|
-
* TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
|
|
16631
|
-
* .withTranslations('en', ENGLISH_TRANSLATIONS)
|
|
16632
|
-
* .withDefaultLanguage('en');
|
|
16633
|
-
*
|
|
16634
|
-
* @param language the new default language for translations.
|
|
16635
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16636
|
-
* @memberof TranslateTestingModule
|
|
16637
|
-
*/
|
|
16638
|
-
withDefaultLanguage(language) {
|
|
16639
|
-
this._defaultLanguage = language || this._defaultLanguage;
|
|
16640
|
-
return this;
|
|
16641
|
-
}
|
|
16642
|
-
addTranslations(language, translations) {
|
|
16643
|
-
if (!this._defaultLanguage) {
|
|
16644
|
-
this._defaultLanguage = language;
|
|
16645
|
-
}
|
|
16646
|
-
if (this._translations[language]) {
|
|
16647
|
-
this._translations[language] = {
|
|
16648
|
-
...this._translations[language],
|
|
16649
|
-
...translations,
|
|
16650
|
-
};
|
|
16651
|
-
}
|
|
16652
|
-
else {
|
|
16653
|
-
this._translations[language] = translations;
|
|
16654
|
-
}
|
|
16655
|
-
}
|
|
16656
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16657
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
|
|
16658
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
|
|
16659
|
-
}
|
|
16660
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
|
|
16661
|
-
type: NgModule,
|
|
16662
|
-
args: [{
|
|
16663
|
-
imports: [TranslateModule],
|
|
16664
|
-
exports: [TranslateModule],
|
|
16665
|
-
}]
|
|
16666
|
-
}] });
|
|
16667
|
-
|
|
16668
16561
|
var dropFile$6 = "Datei ablegen";
|
|
16669
16562
|
var next$6 = "weiter";
|
|
16670
16563
|
var previous$6 = "zurück";
|
|
@@ -16687,20 +16580,21 @@ var de = {
|
|
|
16687
16580
|
"chart.type.line": "Liniendiagramm",
|
|
16688
16581
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16689
16582
|
"chart.type.pie": "Kreisdiagramm",
|
|
16690
|
-
"dashboard.
|
|
16691
|
-
"dashboard.
|
|
16692
|
-
"dashboard.records.
|
|
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.
|
|
16583
|
+
"dashboard.createRecord": "",
|
|
16584
|
+
"dashboard.labels.mySpace": "Mein Bereich",
|
|
16585
|
+
"dashboard.records.all": "Katalog",
|
|
16586
|
+
"dashboard.records.myDraft": "Meine Entwürfe",
|
|
16587
|
+
"dashboard.records.myLibrary": "Meine Bibliothek",
|
|
16588
|
+
"dashboard.records.myOrg": "Meine Organisation",
|
|
16589
|
+
"dashboard.records.myRecords": "Meine Datensätze",
|
|
16590
|
+
"dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
|
|
16591
|
+
"dashboard.records.search": "Suche nach \"{searchText}\"",
|
|
16592
|
+
"dashboard.records.userDetail": "Name",
|
|
16593
|
+
"dashboard.records.userEmail": "E-Mail",
|
|
16594
|
+
"dashboard.records.username": "Benutzername",
|
|
16595
|
+
"dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
|
|
16596
|
+
"dashboard.results.listMetadata": "",
|
|
16597
|
+
"dashboard.results.listResources": "",
|
|
16704
16598
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16705
16599
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16706
16600
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16714,7 +16608,7 @@ var de = {
|
|
|
16714
16608
|
"datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
|
|
16715
16609
|
"datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
|
|
16716
16610
|
"datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
|
|
16717
|
-
"datafeeder.form.tags": "Wählen Sie einen oder mehrere
|
|
16611
|
+
"datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
|
|
16718
16612
|
"datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
|
|
16719
16613
|
"datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
|
|
16720
16614
|
"datafeeder.month.april": "April",
|
|
@@ -16729,16 +16623,16 @@ var de = {
|
|
|
16729
16623
|
"datafeeder.month.november": "November",
|
|
16730
16624
|
"datafeeder.month.october": "Oktober",
|
|
16731
16625
|
"datafeeder.month.september": "September",
|
|
16732
|
-
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist",
|
|
16733
|
-
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz zum Veröffentlichen?",
|
|
16626
|
+
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
|
|
16627
|
+
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
|
|
16734
16628
|
"datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
|
|
16735
|
-
"datafeeder.publish.title": "Vielen Dank! Ihr Datensatz wird veröffentlicht",
|
|
16629
|
+
"datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
|
|
16736
16630
|
"datafeeder.publish.upload": "Jetzt hochladen",
|
|
16737
16631
|
"datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
|
|
16738
16632
|
"datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
|
|
16739
16633
|
"datafeeder.publishSuccess.mapViewer": "Kartenviewer",
|
|
16740
16634
|
"datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
|
|
16741
|
-
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! Ihr Datensatz wurde veröffentlicht",
|
|
16635
|
+
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
|
|
16742
16636
|
"datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
|
|
16743
16637
|
"datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
|
|
16744
16638
|
"datafeeder.summarizePage.previous": "Zurück",
|
|
@@ -16746,11 +16640,11 @@ var de = {
|
|
|
16746
16640
|
"datafeeder.summarizePage.title": "Sie sind fast fertig...",
|
|
16747
16641
|
"datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
|
|
16748
16642
|
"datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
|
|
16749
|
-
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen
|
|
16643
|
+
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
|
|
16750
16644
|
"datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
|
|
16751
16645
|
"datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
|
|
16752
|
-
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie:
|
|
16753
|
-
"datafeeder.upload.error.title.analysis": "Fehler
|
|
16646
|
+
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
|
|
16647
|
+
"datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
|
|
16754
16648
|
"datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
|
|
16755
16649
|
"datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
|
|
16756
16650
|
"datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
|
|
@@ -16758,19 +16652,19 @@ var de = {
|
|
|
16758
16652
|
"datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
|
|
16759
16653
|
"datafeeder.upload.illustration.enrichment": "Anreicherung",
|
|
16760
16654
|
"datafeeder.upload.illustration.import": "Import",
|
|
16761
|
-
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten war noch nie
|
|
16655
|
+
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
|
|
16762
16656
|
"datafeeder.upload.illustration.validation": "Validierung",
|
|
16763
|
-
"datafeeder.upload.illustration.verification": "
|
|
16657
|
+
"datafeeder.upload.illustration.verification": "Überprüfung",
|
|
16764
16658
|
"datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
|
|
16765
16659
|
"datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
|
|
16766
16660
|
"datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
|
|
16767
16661
|
"datafeeder.upload.uploadButton": "Hochladen",
|
|
16768
|
-
"datafeeder.validation.encoding": "
|
|
16662
|
+
"datafeeder.validation.encoding": "Codierung",
|
|
16769
16663
|
"datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
|
|
16770
16664
|
"datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
|
|
16771
16665
|
"datafeeder.validation.projection": "Raumbezugssystem:",
|
|
16772
|
-
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem",
|
|
16773
|
-
"datafeeder.validation.sample.title": "Und eine
|
|
16666
|
+
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
|
|
16667
|
+
"datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
|
|
16774
16668
|
"datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
|
|
16775
16669
|
"datafeeder.wizardSummarize.createdAt": "Erstellt am",
|
|
16776
16670
|
"datafeeder.wizardSummarize.scale": "Maßstab",
|
|
@@ -16780,19 +16674,20 @@ var de = {
|
|
|
16780
16674
|
"datahub.header.news": "Startseite",
|
|
16781
16675
|
"datahub.header.organisations": "Organisationen",
|
|
16782
16676
|
"datahub.header.popularRecords": "Die beliebtesten",
|
|
16783
|
-
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten
|
|
16784
|
-
"datahub.news.contact.contactus": "",
|
|
16785
|
-
"datahub.news.contact.html": "",
|
|
16786
|
-
"datahub.news.contact.title": "",
|
|
16677
|
+
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
|
|
16678
|
+
"datahub.news.contact.contactus": "Kontaktieren Sie uns",
|
|
16679
|
+
"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>",
|
|
16680
|
+
"datahub.news.contact.title": "Ein spezielles Bedürfnis?",
|
|
16787
16681
|
"datahub.news.feed": "Nachrichtenfeed",
|
|
16788
16682
|
"datahub.news.figures": "Indikatoren",
|
|
16789
|
-
"datahub.
|
|
16683
|
+
"datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
|
|
16684
|
+
"datahub.search.back": "Zurück",
|
|
16790
16685
|
"datahub.search.filter.all": "Alle",
|
|
16791
|
-
"datahub.search.filter.generatedByWfs": "Generiert durch API",
|
|
16686
|
+
"datahub.search.filter.generatedByWfs": "Generiert durch eine API",
|
|
16792
16687
|
"datahub.search.filter.others": "Andere",
|
|
16793
16688
|
"dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
|
|
16794
16689
|
"dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
|
|
16795
|
-
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht
|
|
16690
|
+
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
|
|
16796
16691
|
"dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
|
|
16797
16692
|
"dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
|
|
16798
16693
|
"domain.record.status.completed": "Abgeschlossen",
|
|
@@ -16800,18 +16695,18 @@ var de = {
|
|
|
16800
16695
|
"domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
|
|
16801
16696
|
"domain.record.status.removed": "Entfernt",
|
|
16802
16697
|
"domain.record.status.under_development": "In Erstellung",
|
|
16803
|
-
"domain.record.updateFrequency.asNeeded": "
|
|
16804
|
-
"domain.record.updateFrequency.continual": "
|
|
16698
|
+
"domain.record.updateFrequency.asNeeded": "Nach Bedarf",
|
|
16699
|
+
"domain.record.updateFrequency.continual": "Fortlaufend",
|
|
16805
16700
|
"domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
|
|
16806
|
-
"domain.record.updateFrequency.irregular": "
|
|
16701
|
+
"domain.record.updateFrequency.irregular": "Unregelmäßig",
|
|
16807
16702
|
"domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
|
|
16808
16703
|
"domain.record.updateFrequency.notPlanned": "Nicht geplant",
|
|
16809
|
-
"domain.record.updateFrequency.periodic": "
|
|
16704
|
+
"domain.record.updateFrequency.periodic": "Regelmäßig",
|
|
16810
16705
|
"domain.record.updateFrequency.unknown": "Unbekannt",
|
|
16811
16706
|
"domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
|
|
16812
16707
|
"domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
|
|
16813
16708
|
"downloads.format.unknown": "unbekannt",
|
|
16814
|
-
"downloads.wfs.featuretype.not.found": "
|
|
16709
|
+
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
16815
16710
|
dropFile: dropFile$6,
|
|
16816
16711
|
"externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
|
|
16817
16712
|
"facets.block.title.OrgForResource": "Organisation",
|
|
@@ -16846,10 +16741,18 @@ var de = {
|
|
|
16846
16741
|
"map.add.layer.file": "Aus einer Datei",
|
|
16847
16742
|
"map.add.layer.wfs": "Aus WFS",
|
|
16848
16743
|
"map.add.layer.wms": "Aus WMS",
|
|
16744
|
+
"map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
|
|
16745
|
+
"map.geocoding.placeholder": "",
|
|
16746
|
+
"map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
|
|
16747
|
+
"map.layer.add": "Hinzufügen",
|
|
16748
|
+
"map.layers.available": "Verfügbare Layer",
|
|
16849
16749
|
"map.layers.list": "Ebenen",
|
|
16850
16750
|
"map.loading.data": "Kartendaten werden geladen...",
|
|
16751
|
+
"map.loading.service": "Dienst wird geladen...",
|
|
16851
16752
|
"map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
|
|
16852
16753
|
"map.select.layer": "Datenquelle",
|
|
16754
|
+
"map.wfs.urlInput.hint": "Geben Sie die WFS URL ein",
|
|
16755
|
+
"map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
|
|
16853
16756
|
"multiselect.filter.placeholder": "Suche",
|
|
16854
16757
|
"nav.back": "Zurück",
|
|
16855
16758
|
next: next$6,
|
|
@@ -16865,56 +16768,61 @@ var de = {
|
|
|
16865
16768
|
"pagination.pageOf": "von",
|
|
16866
16769
|
previous: previous$6,
|
|
16867
16770
|
"record.action.download": "Herunterladen",
|
|
16868
|
-
"record.action.view": "
|
|
16771
|
+
"record.action.view": "Anzeigen",
|
|
16869
16772
|
"record.externalViewer.open": "In externem Kartenviewer öffnen",
|
|
16870
16773
|
"record.metadata.about": "Beschreibung",
|
|
16871
16774
|
"record.metadata.api": "API",
|
|
16872
|
-
"record.metadata.api.form.closeButton": "",
|
|
16873
|
-
"record.metadata.api.form.closeForm": "",
|
|
16874
|
-
"record.metadata.api.form.create": "",
|
|
16875
|
-
"record.metadata.api.form.customUrl": "",
|
|
16876
|
-
"record.metadata.api.form.limit": "",
|
|
16877
|
-
"record.metadata.api.form.limit.all": "",
|
|
16878
|
-
"record.metadata.api.form.offset": "",
|
|
16879
|
-
"record.metadata.api.form.openForm": "",
|
|
16880
|
-
"record.metadata.api.form.reset": "",
|
|
16881
|
-
"record.metadata.api.form.title": "",
|
|
16882
|
-
"record.metadata.api.form.type": "",
|
|
16883
|
-
"record.metadata.author": "",
|
|
16775
|
+
"record.metadata.api.form.closeButton": "Schließen",
|
|
16776
|
+
"record.metadata.api.form.closeForm": "Formular schließen",
|
|
16777
|
+
"record.metadata.api.form.create": "Ihre Anfrage erstellen",
|
|
16778
|
+
"record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
|
|
16779
|
+
"record.metadata.api.form.limit": "Anzahl der Datensätze",
|
|
16780
|
+
"record.metadata.api.form.limit.all": "Alle",
|
|
16781
|
+
"record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
|
|
16782
|
+
"record.metadata.api.form.openForm": "Formular öffnen",
|
|
16783
|
+
"record.metadata.api.form.reset": "Zurücksetzen",
|
|
16784
|
+
"record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
|
|
16785
|
+
"record.metadata.api.form.type": "Ausgabeformat",
|
|
16786
|
+
"record.metadata.author": "Autor",
|
|
16884
16787
|
"record.metadata.catalog": "Katalog",
|
|
16885
16788
|
"record.metadata.contact": "Kontakt",
|
|
16886
|
-
"record.metadata.
|
|
16887
|
-
"record.metadata.details": "Details",
|
|
16789
|
+
"record.metadata.details": "Technische Informationen",
|
|
16888
16790
|
"record.metadata.download": "Downloads",
|
|
16889
|
-
"record.metadata.formats": "",
|
|
16890
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16791
|
+
"record.metadata.formats": "Formate",
|
|
16891
16792
|
"record.metadata.keywords": "Stichworte",
|
|
16793
|
+
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16892
16794
|
"record.metadata.links": "Links",
|
|
16893
|
-
"record.metadata.noUsage": "Für diesen Datensatz sind keine
|
|
16795
|
+
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16894
16796
|
"record.metadata.origin": "Über die Daten",
|
|
16797
|
+
"record.metadata.otherConstraints": "",
|
|
16798
|
+
"record.metadata.owner": "",
|
|
16895
16799
|
"record.metadata.preview": "Vorschau",
|
|
16896
16800
|
"record.metadata.publications": "Veröffentlichungen",
|
|
16897
|
-
"record.metadata.quality": "",
|
|
16898
|
-
"record.metadata.quality.contact.failed": "",
|
|
16899
|
-
"record.metadata.quality.contact.success": "",
|
|
16900
|
-
"record.metadata.quality.description.failed": "",
|
|
16901
|
-
"record.metadata.quality.description.success": "",
|
|
16902
|
-
"record.metadata.quality.details": "",
|
|
16903
|
-
"record.metadata.quality.keywords.failed": "",
|
|
16904
|
-
"record.metadata.quality.keywords.success": "",
|
|
16905
|
-
"record.metadata.quality.legalConstraints.failed": "",
|
|
16906
|
-
"record.metadata.quality.legalConstraints.success": "",
|
|
16907
|
-
"record.metadata.quality.organisation.failed": "",
|
|
16908
|
-
"record.metadata.quality.organisation.success": "",
|
|
16909
|
-
"record.metadata.quality.title.failed": "",
|
|
16910
|
-
"record.metadata.quality.title.success": "",
|
|
16911
|
-
"record.metadata.quality.topic.failed": "",
|
|
16912
|
-
"record.metadata.quality.topic.success": "",
|
|
16913
|
-
"record.metadata.quality.updateFrequency.failed": "",
|
|
16914
|
-
"record.metadata.quality.updateFrequency.success": "",
|
|
16801
|
+
"record.metadata.quality": "Metadatenqualität",
|
|
16802
|
+
"record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
|
|
16803
|
+
"record.metadata.quality.contact.success": "Kontakt angegeben",
|
|
16804
|
+
"record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
|
|
16805
|
+
"record.metadata.quality.description.success": "Beschreibung angegeben",
|
|
16806
|
+
"record.metadata.quality.details": "Details",
|
|
16807
|
+
"record.metadata.quality.keywords.failed": "Schlagwörter nicht angegeben",
|
|
16808
|
+
"record.metadata.quality.keywords.success": "Schlagwörter angegeben",
|
|
16809
|
+
"record.metadata.quality.legalConstraints.failed": "Rechtliche Beschränkungen nicht angegeben",
|
|
16810
|
+
"record.metadata.quality.legalConstraints.success": "Rechtliche Beschränkungen angegeben",
|
|
16811
|
+
"record.metadata.quality.organisation.failed": "Organisation nicht angegeben",
|
|
16812
|
+
"record.metadata.quality.organisation.success": "Organisation angegeben",
|
|
16813
|
+
"record.metadata.quality.title.failed": "Titel nicht angegeben",
|
|
16814
|
+
"record.metadata.quality.title.success": "Titel angegeben",
|
|
16815
|
+
"record.metadata.quality.topic.failed": "Thema nicht angegeben",
|
|
16816
|
+
"record.metadata.quality.topic.success": "Thema angegeben",
|
|
16817
|
+
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
16818
|
+
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
16915
16819
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16916
|
-
"record.metadata.sheet": "Weitere Informationen
|
|
16820
|
+
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16821
|
+
"record.metadata.status": "",
|
|
16822
|
+
"record.metadata.themes": "Kategorien",
|
|
16917
16823
|
"record.metadata.title": "Titel",
|
|
16824
|
+
"record.metadata.type": "Geographischer Datensatz",
|
|
16825
|
+
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16918
16826
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
16919
16827
|
"record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
|
|
16920
16828
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
@@ -16926,28 +16834,29 @@ var de = {
|
|
|
16926
16834
|
"record.was.created.time": "erstellte diesen Datensatz {time}",
|
|
16927
16835
|
records: records$6,
|
|
16928
16836
|
"results.layout.selectOne": "Layout auswählen",
|
|
16929
|
-
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{
|
|
16930
|
-
"results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie
|
|
16837
|
+
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
|
|
16838
|
+
"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>",
|
|
16931
16839
|
"results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
|
|
16932
|
-
"results.records.hits.selected": "",
|
|
16840
|
+
"results.records.hits.selected": "{ amount } ausgewählt",
|
|
16933
16841
|
"results.showMore": "Mehr Ergebnisse anzeigen...",
|
|
16934
|
-
"results.sortBy.dateStamp": "
|
|
16842
|
+
"results.sortBy.dateStamp": "Neueste",
|
|
16935
16843
|
"results.sortBy.popularity": "Beliebtheit",
|
|
16936
|
-
"results.sortBy.qualityScore": "",
|
|
16844
|
+
"results.sortBy.qualityScore": "Qualitätsbewertung",
|
|
16937
16845
|
"results.sortBy.relevancy": "Relevanz",
|
|
16938
16846
|
"search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
|
|
16939
16847
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
16940
|
-
"search.error.receivedError": "Ein Fehler
|
|
16848
|
+
"search.error.receivedError": "Ein Fehler ist aufgetreten",
|
|
16941
16849
|
"search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
|
|
16942
|
-
"search.field.any.placeholder": "Suche
|
|
16850
|
+
"search.field.any.placeholder": "Suche Datensätze ...",
|
|
16943
16851
|
"search.field.sortBy": "Sortieren nach:",
|
|
16944
16852
|
"search.filters.clear": "Zurücksetzen",
|
|
16945
|
-
"search.filters.contact": "
|
|
16853
|
+
"search.filters.contact": "Kontakte",
|
|
16946
16854
|
"search.filters.format": "Formate",
|
|
16947
16855
|
"search.filters.inspireKeyword": "INSPIRE-Schlüsselwort",
|
|
16948
16856
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16949
16857
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16950
16858
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16859
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16951
16860
|
"search.filters.license": "Lizenz",
|
|
16952
16861
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16953
16862
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -16960,13 +16869,13 @@ var de = {
|
|
|
16960
16869
|
"search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
16961
16870
|
"search.filters.maximize": "Erweitern",
|
|
16962
16871
|
"search.filters.minimize": "Minimieren",
|
|
16963
|
-
"search.filters.myRecords": "",
|
|
16964
|
-
"search.filters.myRecordsHelp": "",
|
|
16965
|
-
"search.filters.otherRecords": "",
|
|
16872
|
+
"search.filters.myRecords": "Nur meine Datensätze anzeigen",
|
|
16873
|
+
"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.",
|
|
16874
|
+
"search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
|
|
16966
16875
|
"search.filters.publicationYear": "Veröffentlichungsjahr",
|
|
16967
16876
|
"search.filters.publisher": "Organisationen",
|
|
16968
|
-
"search.filters.representationType": "",
|
|
16969
|
-
"search.filters.resourceType": "",
|
|
16877
|
+
"search.filters.representationType": "Repräsentationstyp",
|
|
16878
|
+
"search.filters.resourceType": "Ressourcentyp",
|
|
16970
16879
|
"search.filters.standard": "Standard",
|
|
16971
16880
|
"search.filters.title": "Ergebnisse filtern",
|
|
16972
16881
|
"search.filters.topic": "Thema",
|
|
@@ -16978,6 +16887,7 @@ var de = {
|
|
|
16978
16887
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16979
16888
|
"table.select.data": "Datenquelle",
|
|
16980
16889
|
"tooltip.html.copy": "HTML kopieren",
|
|
16890
|
+
"tooltip.id.copy": "",
|
|
16981
16891
|
"tooltip.url.copy": "URL kopieren",
|
|
16982
16892
|
"tooltip.url.open": "URL öffnen",
|
|
16983
16893
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17011,20 +16921,21 @@ var en = {
|
|
|
17011
16921
|
"chart.type.line": "line chart",
|
|
17012
16922
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17013
16923
|
"chart.type.pie": "pie chart",
|
|
16924
|
+
"dashboard.createRecord": "New record",
|
|
17014
16925
|
"dashboard.labels.mySpace": "My space",
|
|
17015
|
-
"dashboard.records.all": "
|
|
16926
|
+
"dashboard.records.all": "Metadata records",
|
|
17016
16927
|
"dashboard.records.myDraft": "My drafts",
|
|
17017
16928
|
"dashboard.records.myLibrary": "My library",
|
|
17018
16929
|
"dashboard.records.myOrg": "Organization",
|
|
17019
16930
|
"dashboard.records.myRecords": "My Records",
|
|
17020
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17021
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17022
16931
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17023
16932
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17024
16933
|
"dashboard.records.userDetail": "Name",
|
|
17025
16934
|
"dashboard.records.userEmail": "Email",
|
|
17026
16935
|
"dashboard.records.username": "Username",
|
|
17027
16936
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
16937
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
16938
|
+
"dashboard.results.listResources": "Show resources",
|
|
17028
16939
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17029
16940
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17030
16941
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17110,7 +17021,8 @@ var en = {
|
|
|
17110
17021
|
"datahub.news.contact.title": "A specific need?",
|
|
17111
17022
|
"datahub.news.feed": "News feed",
|
|
17112
17023
|
"datahub.news.figures": "Indicators",
|
|
17113
|
-
"datahub.
|
|
17024
|
+
"datahub.record.addToFavorites": "Add to favorites",
|
|
17025
|
+
"datahub.search.back": "Back",
|
|
17114
17026
|
"datahub.search.filter.all": "All",
|
|
17115
17027
|
"datahub.search.filter.generatedByWfs": "generated by an API",
|
|
17116
17028
|
"datahub.search.filter.others": "Others",
|
|
@@ -17170,10 +17082,18 @@ var en = {
|
|
|
17170
17082
|
"map.add.layer.file": "From a file",
|
|
17171
17083
|
"map.add.layer.wfs": "From WFS",
|
|
17172
17084
|
"map.add.layer.wms": "From WMS",
|
|
17085
|
+
"map.addFromFile.placeholder": "Click or drop a file here",
|
|
17086
|
+
"map.geocoding.placeholder": "Search for a place",
|
|
17087
|
+
"map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
|
|
17088
|
+
"map.layer.add": "Add",
|
|
17089
|
+
"map.layers.available": "Available Layers",
|
|
17173
17090
|
"map.layers.list": "Layers",
|
|
17174
17091
|
"map.loading.data": "Loading map data...",
|
|
17092
|
+
"map.loading.service": "Loading service...",
|
|
17175
17093
|
"map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
|
|
17176
17094
|
"map.select.layer": "Data source",
|
|
17095
|
+
"map.wfs.urlInput.hint": "Enter WFS service URL",
|
|
17096
|
+
"map.wms.urlInput.hint": "Enter WMS service URL",
|
|
17177
17097
|
"multiselect.filter.placeholder": "Search",
|
|
17178
17098
|
"nav.back": "Back",
|
|
17179
17099
|
next: next$5,
|
|
@@ -17207,42 +17127,47 @@ var en = {
|
|
|
17207
17127
|
"record.metadata.author": "Author",
|
|
17208
17128
|
"record.metadata.catalog": "Catalog",
|
|
17209
17129
|
"record.metadata.contact": "Contact",
|
|
17210
|
-
"record.metadata.
|
|
17211
|
-
"record.metadata.details": "Details",
|
|
17130
|
+
"record.metadata.details": "Technical information",
|
|
17212
17131
|
"record.metadata.download": "Downloads",
|
|
17213
17132
|
"record.metadata.formats": "Formats",
|
|
17214
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17215
17133
|
"record.metadata.keywords": "Keywords",
|
|
17134
|
+
"record.metadata.lastUpdate": "Last updated on",
|
|
17216
17135
|
"record.metadata.links": "Links",
|
|
17217
17136
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17218
17137
|
"record.metadata.origin": "About the data",
|
|
17138
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17139
|
+
"record.metadata.owner": "Catalog of origin",
|
|
17219
17140
|
"record.metadata.preview": "Preview",
|
|
17220
17141
|
"record.metadata.publications": "publications",
|
|
17221
17142
|
"record.metadata.quality": "Metadata Quality",
|
|
17222
|
-
"record.metadata.quality.contact.failed": "Contact is not
|
|
17223
|
-
"record.metadata.quality.contact.success": "Contact is
|
|
17224
|
-
"record.metadata.quality.description.failed": "Description is not
|
|
17225
|
-
"record.metadata.quality.description.success": "Description is
|
|
17143
|
+
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
17144
|
+
"record.metadata.quality.contact.success": "Contact is specified",
|
|
17145
|
+
"record.metadata.quality.description.failed": "Description is not specified",
|
|
17146
|
+
"record.metadata.quality.description.success": "Description is specified",
|
|
17226
17147
|
"record.metadata.quality.details": "Details",
|
|
17227
|
-
"record.metadata.quality.keywords.failed": "Keywords are not
|
|
17228
|
-
"record.metadata.quality.keywords.success": "Keywords are
|
|
17229
|
-
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not
|
|
17230
|
-
"record.metadata.quality.legalConstraints.success": "Legal constraints are
|
|
17231
|
-
"record.metadata.quality.organisation.failed": "Organisation is not
|
|
17232
|
-
"record.metadata.quality.organisation.success": "Organisation is
|
|
17233
|
-
"record.metadata.quality.title.failed": "Title is not
|
|
17234
|
-
"record.metadata.quality.title.success": "Title is
|
|
17235
|
-
"record.metadata.quality.topic.failed": "Topic is not
|
|
17236
|
-
"record.metadata.quality.topic.success": "Topic is
|
|
17237
|
-
"record.metadata.quality.updateFrequency.failed": "Update frequency is not
|
|
17238
|
-
"record.metadata.quality.updateFrequency.success": "Update frequency is
|
|
17148
|
+
"record.metadata.quality.keywords.failed": "Keywords are not specified",
|
|
17149
|
+
"record.metadata.quality.keywords.success": "Keywords are specified",
|
|
17150
|
+
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
|
|
17151
|
+
"record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
|
|
17152
|
+
"record.metadata.quality.organisation.failed": "Organisation is not specified",
|
|
17153
|
+
"record.metadata.quality.organisation.success": "Organisation is specified",
|
|
17154
|
+
"record.metadata.quality.title.failed": "Title is not specified",
|
|
17155
|
+
"record.metadata.quality.title.success": "Title is specified",
|
|
17156
|
+
"record.metadata.quality.topic.failed": "Topic is not specified",
|
|
17157
|
+
"record.metadata.quality.topic.success": "Topic is specified",
|
|
17158
|
+
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
17159
|
+
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17239
17160
|
"record.metadata.related": "Related records",
|
|
17240
|
-
"record.metadata.sheet": "
|
|
17161
|
+
"record.metadata.sheet": "Original metadata",
|
|
17162
|
+
"record.metadata.status": "Status",
|
|
17163
|
+
"record.metadata.themes": "Categories",
|
|
17241
17164
|
"record.metadata.title": "Title",
|
|
17165
|
+
"record.metadata.type": "Geographical dataset",
|
|
17166
|
+
"record.metadata.uniqueId": "Unique Identifier",
|
|
17242
17167
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17243
17168
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17244
17169
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17245
|
-
"record.metadata.usage": "
|
|
17170
|
+
"record.metadata.usage": "License and Conditions",
|
|
17246
17171
|
"record.more.details": "Read more",
|
|
17247
17172
|
"record.tab.chart": "Chart",
|
|
17248
17173
|
"record.tab.data": "Table",
|
|
@@ -17272,6 +17197,7 @@ var en = {
|
|
|
17272
17197
|
"search.filters.isSpatial": "Is spatial data",
|
|
17273
17198
|
"search.filters.isSpatial.no": "non spatial",
|
|
17274
17199
|
"search.filters.isSpatial.yes": "spatial",
|
|
17200
|
+
"search.filters.keyword": "Keyword",
|
|
17275
17201
|
"search.filters.license": "License",
|
|
17276
17202
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17277
17203
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17302,6 +17228,7 @@ var en = {
|
|
|
17302
17228
|
"table.object.count": "objects in this dataset",
|
|
17303
17229
|
"table.select.data": "Data source",
|
|
17304
17230
|
"tooltip.html.copy": "Copy HTML",
|
|
17231
|
+
"tooltip.id.copy": "Copy unique identifier",
|
|
17305
17232
|
"tooltip.url.copy": "Copy URL",
|
|
17306
17233
|
"tooltip.url.open": "Open URL",
|
|
17307
17234
|
"ui.readLess": "Read less",
|
|
@@ -17335,20 +17262,21 @@ var es = {
|
|
|
17335
17262
|
"chart.type.line": "gráfico de líneas",
|
|
17336
17263
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17337
17264
|
"chart.type.pie": "gráfico circular",
|
|
17265
|
+
"dashboard.createRecord": "",
|
|
17338
17266
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17339
17267
|
"dashboard.records.all": "Catálogo",
|
|
17340
17268
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17341
17269
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17342
17270
|
"dashboard.records.myOrg": "Organización",
|
|
17343
17271
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17344
|
-
"dashboard.records.noRecord": "",
|
|
17345
|
-
"dashboard.records.noUser": "",
|
|
17346
17272
|
"dashboard.records.publishedRecords": "",
|
|
17347
17273
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17348
17274
|
"dashboard.records.userDetail": "",
|
|
17349
17275
|
"dashboard.records.userEmail": "",
|
|
17350
17276
|
"dashboard.records.username": "",
|
|
17351
17277
|
"dashboard.records.users": "",
|
|
17278
|
+
"dashboard.results.listMetadata": "",
|
|
17279
|
+
"dashboard.results.listResources": "",
|
|
17352
17280
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17353
17281
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17354
17282
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17434,6 +17362,7 @@ var es = {
|
|
|
17434
17362
|
"datahub.news.contact.title": "",
|
|
17435
17363
|
"datahub.news.feed": "",
|
|
17436
17364
|
"datahub.news.figures": "",
|
|
17365
|
+
"datahub.record.addToFavorites": "",
|
|
17437
17366
|
"datahub.search.back": "",
|
|
17438
17367
|
"datahub.search.filter.all": "",
|
|
17439
17368
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -17494,10 +17423,18 @@ var es = {
|
|
|
17494
17423
|
"map.add.layer.file": "",
|
|
17495
17424
|
"map.add.layer.wfs": "",
|
|
17496
17425
|
"map.add.layer.wms": "",
|
|
17426
|
+
"map.addFromFile.placeholder": "",
|
|
17427
|
+
"map.geocoding.placeholder": "",
|
|
17428
|
+
"map.help.addFromFile": "",
|
|
17429
|
+
"map.layer.add": "",
|
|
17430
|
+
"map.layers.available": "",
|
|
17497
17431
|
"map.layers.list": "",
|
|
17498
17432
|
"map.loading.data": "",
|
|
17433
|
+
"map.loading.service": "",
|
|
17499
17434
|
"map.navigation.message": "",
|
|
17500
17435
|
"map.select.layer": "",
|
|
17436
|
+
"map.wfs.urlInput.hint": "",
|
|
17437
|
+
"map.wms.urlInput.hint": "",
|
|
17501
17438
|
"multiselect.filter.placeholder": "",
|
|
17502
17439
|
"nav.back": "",
|
|
17503
17440
|
next: next$4,
|
|
@@ -17531,15 +17468,16 @@ var es = {
|
|
|
17531
17468
|
"record.metadata.author": "",
|
|
17532
17469
|
"record.metadata.catalog": "",
|
|
17533
17470
|
"record.metadata.contact": "",
|
|
17534
|
-
"record.metadata.createdOn": "",
|
|
17535
17471
|
"record.metadata.details": "",
|
|
17536
17472
|
"record.metadata.download": "",
|
|
17537
17473
|
"record.metadata.formats": "",
|
|
17538
|
-
"record.metadata.isOpenData": "",
|
|
17539
17474
|
"record.metadata.keywords": "",
|
|
17475
|
+
"record.metadata.lastUpdate": "",
|
|
17540
17476
|
"record.metadata.links": "",
|
|
17541
17477
|
"record.metadata.noUsage": "",
|
|
17542
17478
|
"record.metadata.origin": "",
|
|
17479
|
+
"record.metadata.otherConstraints": "",
|
|
17480
|
+
"record.metadata.owner": "",
|
|
17543
17481
|
"record.metadata.preview": "",
|
|
17544
17482
|
"record.metadata.publications": "",
|
|
17545
17483
|
"record.metadata.quality": "",
|
|
@@ -17562,7 +17500,11 @@ var es = {
|
|
|
17562
17500
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17563
17501
|
"record.metadata.related": "",
|
|
17564
17502
|
"record.metadata.sheet": "",
|
|
17503
|
+
"record.metadata.status": "",
|
|
17504
|
+
"record.metadata.themes": "",
|
|
17565
17505
|
"record.metadata.title": "",
|
|
17506
|
+
"record.metadata.type": "",
|
|
17507
|
+
"record.metadata.uniqueId": "",
|
|
17566
17508
|
"record.metadata.updateFrequency": "",
|
|
17567
17509
|
"record.metadata.updateStatus": "",
|
|
17568
17510
|
"record.metadata.updatedOn": "",
|
|
@@ -17596,6 +17538,7 @@ var es = {
|
|
|
17596
17538
|
"search.filters.isSpatial": "",
|
|
17597
17539
|
"search.filters.isSpatial.no": "",
|
|
17598
17540
|
"search.filters.isSpatial.yes": "",
|
|
17541
|
+
"search.filters.keyword": "",
|
|
17599
17542
|
"search.filters.license": "",
|
|
17600
17543
|
"search.filters.license.cc-by": "",
|
|
17601
17544
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17626,6 +17569,7 @@ var es = {
|
|
|
17626
17569
|
"table.object.count": "",
|
|
17627
17570
|
"table.select.data": "",
|
|
17628
17571
|
"tooltip.html.copy": "",
|
|
17572
|
+
"tooltip.id.copy": "",
|
|
17629
17573
|
"tooltip.url.copy": "",
|
|
17630
17574
|
"tooltip.url.open": "",
|
|
17631
17575
|
"ui.readLess": "",
|
|
@@ -17659,20 +17603,21 @@ var fr = {
|
|
|
17659
17603
|
"chart.type.line": "ligne",
|
|
17660
17604
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17661
17605
|
"chart.type.pie": "camembert",
|
|
17606
|
+
"dashboard.createRecord": "",
|
|
17662
17607
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17663
17608
|
"dashboard.records.all": "Catalogue",
|
|
17664
17609
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17665
17610
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17666
17611
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17667
17612
|
"dashboard.records.myRecords": "Mes fiches publiées",
|
|
17668
|
-
"dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
|
|
17669
|
-
"dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
|
|
17670
17613
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17671
17614
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17672
17615
|
"dashboard.records.userDetail": "Nom",
|
|
17673
17616
|
"dashboard.records.userEmail": "Email",
|
|
17674
17617
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17675
17618
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17619
|
+
"dashboard.results.listMetadata": "",
|
|
17620
|
+
"dashboard.results.listResources": "",
|
|
17676
17621
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17677
17622
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17678
17623
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17754,11 +17699,12 @@ var fr = {
|
|
|
17754
17699
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17755
17700
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17756
17701
|
"datahub.news.contact.contactus": "Contactez-nous",
|
|
17757
|
-
"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
|
|
17702
|
+
"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>",
|
|
17758
17703
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17759
17704
|
"datahub.news.feed": "Fil d'activité",
|
|
17760
17705
|
"datahub.news.figures": "Quelques chiffres",
|
|
17761
|
-
"datahub.
|
|
17706
|
+
"datahub.record.addToFavorites": "Ajouter aux favoris",
|
|
17707
|
+
"datahub.search.back": "Retour",
|
|
17762
17708
|
"datahub.search.filter.all": "Tous",
|
|
17763
17709
|
"datahub.search.filter.generatedByWfs": "généré par une API",
|
|
17764
17710
|
"datahub.search.filter.others": "Autres",
|
|
@@ -17818,10 +17764,18 @@ var fr = {
|
|
|
17818
17764
|
"map.add.layer.file": "",
|
|
17819
17765
|
"map.add.layer.wfs": "",
|
|
17820
17766
|
"map.add.layer.wms": "",
|
|
17767
|
+
"map.addFromFile.placeholder": "",
|
|
17768
|
+
"map.geocoding.placeholder": "",
|
|
17769
|
+
"map.help.addFromFile": "",
|
|
17770
|
+
"map.layer.add": "",
|
|
17771
|
+
"map.layers.available": "",
|
|
17821
17772
|
"map.layers.list": "",
|
|
17822
17773
|
"map.loading.data": "Chargement des données...",
|
|
17774
|
+
"map.loading.service": "",
|
|
17823
17775
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17824
17776
|
"map.select.layer": "Source de données",
|
|
17777
|
+
"map.wfs.urlInput.hint": "",
|
|
17778
|
+
"map.wms.urlInput.hint": "",
|
|
17825
17779
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17826
17780
|
"nav.back": "Retour",
|
|
17827
17781
|
next: next$3,
|
|
@@ -17855,15 +17809,16 @@ var fr = {
|
|
|
17855
17809
|
"record.metadata.author": "Auteur",
|
|
17856
17810
|
"record.metadata.catalog": "Catalogue",
|
|
17857
17811
|
"record.metadata.contact": "Contact",
|
|
17858
|
-
"record.metadata.
|
|
17859
|
-
"record.metadata.details": "Détails",
|
|
17812
|
+
"record.metadata.details": "Informations techniques",
|
|
17860
17813
|
"record.metadata.download": "Téléchargements",
|
|
17861
17814
|
"record.metadata.formats": "Formats",
|
|
17862
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17863
17815
|
"record.metadata.keywords": "Mots clés",
|
|
17816
|
+
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17864
17817
|
"record.metadata.links": "Liens",
|
|
17865
17818
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17866
17819
|
"record.metadata.origin": "À propos des données",
|
|
17820
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17821
|
+
"record.metadata.owner": "Catalogue d'origine",
|
|
17867
17822
|
"record.metadata.preview": "Aperçu",
|
|
17868
17823
|
"record.metadata.publications": "données",
|
|
17869
17824
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
@@ -17885,12 +17840,16 @@ var fr = {
|
|
|
17885
17840
|
"record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
|
|
17886
17841
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17887
17842
|
"record.metadata.related": "Voir aussi",
|
|
17888
|
-
"record.metadata.sheet": "
|
|
17843
|
+
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17844
|
+
"record.metadata.status": "",
|
|
17845
|
+
"record.metadata.themes": "Catégories",
|
|
17889
17846
|
"record.metadata.title": "Titre",
|
|
17847
|
+
"record.metadata.type": "Donnée géographique",
|
|
17848
|
+
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17890
17849
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17891
17850
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17892
17851
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17893
|
-
"record.metadata.usage": "
|
|
17852
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17894
17853
|
"record.more.details": "Détails",
|
|
17895
17854
|
"record.tab.chart": "Graphique",
|
|
17896
17855
|
"record.tab.data": "Tableau",
|
|
@@ -17920,6 +17879,7 @@ var fr = {
|
|
|
17920
17879
|
"search.filters.isSpatial": "Données spatiales",
|
|
17921
17880
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17922
17881
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
17882
|
+
"search.filters.keyword": "Mot-clé",
|
|
17923
17883
|
"search.filters.license": "Licence",
|
|
17924
17884
|
"search.filters.license.cc-by": "cc-by",
|
|
17925
17885
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -17950,6 +17910,7 @@ var fr = {
|
|
|
17950
17910
|
"table.object.count": "enregistrements dans ces données",
|
|
17951
17911
|
"table.select.data": "Source de données",
|
|
17952
17912
|
"tooltip.html.copy": "Copier le HTML",
|
|
17913
|
+
"tooltip.id.copy": "Copier l'identifiant unique",
|
|
17953
17914
|
"tooltip.url.copy": "Copier l'URL",
|
|
17954
17915
|
"tooltip.url.open": "Ouvrir l'URL",
|
|
17955
17916
|
"ui.readLess": "Réduire",
|
|
@@ -17983,20 +17944,21 @@ var it = {
|
|
|
17983
17944
|
"chart.type.line": "grafico a linee",
|
|
17984
17945
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
17985
17946
|
"chart.type.pie": "grafico a torta",
|
|
17947
|
+
"dashboard.createRecord": "",
|
|
17986
17948
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
17987
17949
|
"dashboard.records.all": "Catalogo",
|
|
17988
17950
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
17989
17951
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
17990
17952
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
17991
17953
|
"dashboard.records.myRecords": "I miei dati",
|
|
17992
|
-
"dashboard.records.noRecord": "Nessun dati per questa organizzazione",
|
|
17993
|
-
"dashboard.records.noUser": "Nessun utente per questa organizzazione",
|
|
17994
17954
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
17995
17955
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
17996
17956
|
"dashboard.records.userDetail": "Nome",
|
|
17997
17957
|
"dashboard.records.userEmail": "Email",
|
|
17998
17958
|
"dashboard.records.username": "Nome utente",
|
|
17999
17959
|
"dashboard.records.users": "utenti",
|
|
17960
|
+
"dashboard.results.listMetadata": "",
|
|
17961
|
+
"dashboard.results.listResources": "",
|
|
18000
17962
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18001
17963
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18002
17964
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18077,12 +18039,13 @@ var it = {
|
|
|
18077
18039
|
"datahub.header.organisations": "Organizzazioni",
|
|
18078
18040
|
"datahub.header.popularRecords": "Più popolari",
|
|
18079
18041
|
"datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
|
|
18080
|
-
"datahub.news.contact.contactus": "",
|
|
18081
|
-
"datahub.news.contact.html": "",
|
|
18082
|
-
"datahub.news.contact.title": "",
|
|
18042
|
+
"datahub.news.contact.contactus": "Contattateci",
|
|
18043
|
+
"datahub.news.contact.html": "<p>Ha bisogno di dati che non sono attualmente disponibili sulla piattaforma? </p><p> I nostri team sono qui per aiutarla.</p>",
|
|
18044
|
+
"datahub.news.contact.title": "Ha un bisogno specifico?",
|
|
18083
18045
|
"datahub.news.feed": "Feed di attività",
|
|
18084
18046
|
"datahub.news.figures": "Alcune figure",
|
|
18085
|
-
"datahub.
|
|
18047
|
+
"datahub.record.addToFavorites": "Aggiungere a miei preferiti",
|
|
18048
|
+
"datahub.search.back": "Ritorna",
|
|
18086
18049
|
"datahub.search.filter.all": "Tutti",
|
|
18087
18050
|
"datahub.search.filter.generatedByWfs": "generato da un'API",
|
|
18088
18051
|
"datahub.search.filter.others": "Altri",
|
|
@@ -18109,7 +18072,7 @@ var it = {
|
|
|
18109
18072
|
"downloads.format.unknown": "sconosciuto",
|
|
18110
18073
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18111
18074
|
dropFile: dropFile$2,
|
|
18112
|
-
"externalviewer.dataset.unnamed": "",
|
|
18075
|
+
"externalviewer.dataset.unnamed": "Layer del datahub",
|
|
18113
18076
|
"facets.block.title.OrgForResource": "Organizzazione",
|
|
18114
18077
|
"facets.block.title.availableInServices": "Disponibile per",
|
|
18115
18078
|
"facets.block.title.cl_hierarchyLevel.key": "Tipo di risorsa",
|
|
@@ -18142,10 +18105,18 @@ var it = {
|
|
|
18142
18105
|
"map.add.layer.file": "Da un file",
|
|
18143
18106
|
"map.add.layer.wfs": "Da un WFS",
|
|
18144
18107
|
"map.add.layer.wms": "Da un WMS",
|
|
18108
|
+
"map.addFromFile.placeholder": "",
|
|
18109
|
+
"map.geocoding.placeholder": "",
|
|
18110
|
+
"map.help.addFromFile": "",
|
|
18111
|
+
"map.layer.add": "",
|
|
18112
|
+
"map.layers.available": "",
|
|
18145
18113
|
"map.layers.list": "Layers",
|
|
18146
18114
|
"map.loading.data": "Caricamento dati...",
|
|
18115
|
+
"map.loading.service": "",
|
|
18147
18116
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18148
18117
|
"map.select.layer": "Sorgente dati",
|
|
18118
|
+
"map.wfs.urlInput.hint": "",
|
|
18119
|
+
"map.wms.urlInput.hint": "",
|
|
18149
18120
|
"multiselect.filter.placeholder": "Cerca",
|
|
18150
18121
|
"nav.back": "Indietro",
|
|
18151
18122
|
next: next$2,
|
|
@@ -18179,15 +18150,16 @@ var it = {
|
|
|
18179
18150
|
"record.metadata.author": "Autore",
|
|
18180
18151
|
"record.metadata.catalog": "Catalogo",
|
|
18181
18152
|
"record.metadata.contact": "Contatto",
|
|
18182
|
-
"record.metadata.
|
|
18183
|
-
"record.metadata.details": "Dettagli",
|
|
18153
|
+
"record.metadata.details": "Informazioni tecniche",
|
|
18184
18154
|
"record.metadata.download": "Download",
|
|
18185
18155
|
"record.metadata.formats": "Formati",
|
|
18186
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18187
18156
|
"record.metadata.keywords": "Parole chiave",
|
|
18157
|
+
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18188
18158
|
"record.metadata.links": "Collegamenti",
|
|
18189
18159
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18190
18160
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18161
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18162
|
+
"record.metadata.owner": "Catalogo originale",
|
|
18191
18163
|
"record.metadata.preview": "Anteprima",
|
|
18192
18164
|
"record.metadata.publications": "pubblicazioni",
|
|
18193
18165
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -18209,12 +18181,16 @@ var it = {
|
|
|
18209
18181
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
18210
18182
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18211
18183
|
"record.metadata.related": "Vedi anche",
|
|
18212
|
-
"record.metadata.sheet": "
|
|
18184
|
+
"record.metadata.sheet": "Origine del metadata",
|
|
18185
|
+
"record.metadata.status": "",
|
|
18186
|
+
"record.metadata.themes": "Categorie",
|
|
18213
18187
|
"record.metadata.title": "Titolo",
|
|
18188
|
+
"record.metadata.type": "Dati geografici",
|
|
18189
|
+
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18214
18190
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18215
18191
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18216
18192
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18217
|
-
"record.metadata.usage": "
|
|
18193
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18218
18194
|
"record.more.details": "Dettagli",
|
|
18219
18195
|
"record.tab.chart": "Grafico",
|
|
18220
18196
|
"record.tab.data": "Tabella",
|
|
@@ -18222,10 +18198,10 @@ var it = {
|
|
|
18222
18198
|
"record.was.created.time": "ha creato questi dati {time}",
|
|
18223
18199
|
records: records$2,
|
|
18224
18200
|
"results.layout.selectOne": "Mostra risultati",
|
|
18225
|
-
"results.records.hits.displayedOn": "",
|
|
18201
|
+
"results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
|
|
18226
18202
|
"results.records.hits.empty.help.html": "Suggerimenti: <ul class='list-disc list-inside'><li>Prova con altre parole chiave</li><li>Cerca con meno parole</li></ul>",
|
|
18227
18203
|
"results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
|
|
18228
|
-
"results.records.hits.selected": "",
|
|
18204
|
+
"results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
|
|
18229
18205
|
"results.showMore": "Altri risultati...",
|
|
18230
18206
|
"results.sortBy.dateStamp": "Più recente",
|
|
18231
18207
|
"results.sortBy.popularity": "Popolarità",
|
|
@@ -18244,6 +18220,7 @@ var it = {
|
|
|
18244
18220
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18245
18221
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18246
18222
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18223
|
+
"search.filters.keyword": "Parola chiave",
|
|
18247
18224
|
"search.filters.license": "Licenza",
|
|
18248
18225
|
"search.filters.license.cc-by": "cc-by",
|
|
18249
18226
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18274,10 +18251,11 @@ var it = {
|
|
|
18274
18251
|
"table.object.count": "record in questi dati",
|
|
18275
18252
|
"table.select.data": "Sorgente dati",
|
|
18276
18253
|
"tooltip.html.copy": "Copiare il HTML",
|
|
18254
|
+
"tooltip.id.copy": "Copiare l'identificatore unico",
|
|
18277
18255
|
"tooltip.url.copy": "Copiare l'URL",
|
|
18278
18256
|
"tooltip.url.open": "Aprire l'URL",
|
|
18279
|
-
"ui.readLess": "",
|
|
18280
|
-
"ui.readMore": "",
|
|
18257
|
+
"ui.readLess": "Ridurre",
|
|
18258
|
+
"ui.readMore": "Leggi di più",
|
|
18281
18259
|
"wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
|
|
18282
18260
|
"wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
|
|
18283
18261
|
"wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
|
|
@@ -18307,20 +18285,21 @@ var nl = {
|
|
|
18307
18285
|
"chart.type.line": "lijndiagram",
|
|
18308
18286
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18309
18287
|
"chart.type.pie": "cirkeldiagram",
|
|
18288
|
+
"dashboard.createRecord": "",
|
|
18310
18289
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18311
18290
|
"dashboard.records.all": "Catalogus",
|
|
18312
18291
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18313
18292
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18314
18293
|
"dashboard.records.myOrg": "Organisatie",
|
|
18315
18294
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18316
|
-
"dashboard.records.noRecord": "",
|
|
18317
|
-
"dashboard.records.noUser": "",
|
|
18318
18295
|
"dashboard.records.publishedRecords": "",
|
|
18319
18296
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18320
18297
|
"dashboard.records.userDetail": "",
|
|
18321
18298
|
"dashboard.records.userEmail": "",
|
|
18322
18299
|
"dashboard.records.username": "",
|
|
18323
18300
|
"dashboard.records.users": "",
|
|
18301
|
+
"dashboard.results.listMetadata": "",
|
|
18302
|
+
"dashboard.results.listResources": "",
|
|
18324
18303
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18325
18304
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18326
18305
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18406,6 +18385,7 @@ var nl = {
|
|
|
18406
18385
|
"datahub.news.contact.title": "",
|
|
18407
18386
|
"datahub.news.feed": "",
|
|
18408
18387
|
"datahub.news.figures": "",
|
|
18388
|
+
"datahub.record.addToFavorites": "",
|
|
18409
18389
|
"datahub.search.back": "",
|
|
18410
18390
|
"datahub.search.filter.all": "",
|
|
18411
18391
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18466,10 +18446,18 @@ var nl = {
|
|
|
18466
18446
|
"map.add.layer.file": "",
|
|
18467
18447
|
"map.add.layer.wfs": "",
|
|
18468
18448
|
"map.add.layer.wms": "",
|
|
18449
|
+
"map.addFromFile.placeholder": "",
|
|
18450
|
+
"map.geocoding.placeholder": "",
|
|
18451
|
+
"map.help.addFromFile": "",
|
|
18452
|
+
"map.layer.add": "",
|
|
18453
|
+
"map.layers.available": "",
|
|
18469
18454
|
"map.layers.list": "",
|
|
18470
18455
|
"map.loading.data": "",
|
|
18456
|
+
"map.loading.service": "",
|
|
18471
18457
|
"map.navigation.message": "",
|
|
18472
18458
|
"map.select.layer": "",
|
|
18459
|
+
"map.wfs.urlInput.hint": "",
|
|
18460
|
+
"map.wms.urlInput.hint": "",
|
|
18473
18461
|
"multiselect.filter.placeholder": "",
|
|
18474
18462
|
"nav.back": "",
|
|
18475
18463
|
next: next$1,
|
|
@@ -18503,15 +18491,16 @@ var nl = {
|
|
|
18503
18491
|
"record.metadata.author": "",
|
|
18504
18492
|
"record.metadata.catalog": "",
|
|
18505
18493
|
"record.metadata.contact": "",
|
|
18506
|
-
"record.metadata.createdOn": "",
|
|
18507
18494
|
"record.metadata.details": "",
|
|
18508
18495
|
"record.metadata.download": "",
|
|
18509
18496
|
"record.metadata.formats": "",
|
|
18510
|
-
"record.metadata.isOpenData": "",
|
|
18511
18497
|
"record.metadata.keywords": "",
|
|
18498
|
+
"record.metadata.lastUpdate": "",
|
|
18512
18499
|
"record.metadata.links": "",
|
|
18513
18500
|
"record.metadata.noUsage": "",
|
|
18514
18501
|
"record.metadata.origin": "",
|
|
18502
|
+
"record.metadata.otherConstraints": "",
|
|
18503
|
+
"record.metadata.owner": "",
|
|
18515
18504
|
"record.metadata.preview": "",
|
|
18516
18505
|
"record.metadata.publications": "",
|
|
18517
18506
|
"record.metadata.quality": "",
|
|
@@ -18534,7 +18523,11 @@ var nl = {
|
|
|
18534
18523
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18535
18524
|
"record.metadata.related": "",
|
|
18536
18525
|
"record.metadata.sheet": "",
|
|
18526
|
+
"record.metadata.status": "",
|
|
18527
|
+
"record.metadata.themes": "",
|
|
18537
18528
|
"record.metadata.title": "",
|
|
18529
|
+
"record.metadata.type": "",
|
|
18530
|
+
"record.metadata.uniqueId": "",
|
|
18538
18531
|
"record.metadata.updateFrequency": "",
|
|
18539
18532
|
"record.metadata.updateStatus": "",
|
|
18540
18533
|
"record.metadata.updatedOn": "",
|
|
@@ -18568,6 +18561,7 @@ var nl = {
|
|
|
18568
18561
|
"search.filters.isSpatial": "",
|
|
18569
18562
|
"search.filters.isSpatial.no": "",
|
|
18570
18563
|
"search.filters.isSpatial.yes": "",
|
|
18564
|
+
"search.filters.keyword": "",
|
|
18571
18565
|
"search.filters.license": "",
|
|
18572
18566
|
"search.filters.license.cc-by": "",
|
|
18573
18567
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18598,6 +18592,7 @@ var nl = {
|
|
|
18598
18592
|
"table.object.count": "",
|
|
18599
18593
|
"table.select.data": "",
|
|
18600
18594
|
"tooltip.html.copy": "",
|
|
18595
|
+
"tooltip.id.copy": "",
|
|
18601
18596
|
"tooltip.url.copy": "",
|
|
18602
18597
|
"tooltip.url.open": "",
|
|
18603
18598
|
"ui.readLess": "",
|
|
@@ -18631,20 +18626,21 @@ var pt = {
|
|
|
18631
18626
|
"chart.type.line": "gráfico de linha",
|
|
18632
18627
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18633
18628
|
"chart.type.pie": "gráfico de pizza",
|
|
18629
|
+
"dashboard.createRecord": "",
|
|
18634
18630
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18635
18631
|
"dashboard.records.all": "Catálogo",
|
|
18636
18632
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18637
18633
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18638
18634
|
"dashboard.records.myOrg": "Organização",
|
|
18639
18635
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18640
|
-
"dashboard.records.noRecord": "",
|
|
18641
|
-
"dashboard.records.noUser": "",
|
|
18642
18636
|
"dashboard.records.publishedRecords": "",
|
|
18643
18637
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18644
18638
|
"dashboard.records.userDetail": "",
|
|
18645
18639
|
"dashboard.records.userEmail": "",
|
|
18646
18640
|
"dashboard.records.username": "",
|
|
18647
18641
|
"dashboard.records.users": "",
|
|
18642
|
+
"dashboard.results.listMetadata": "",
|
|
18643
|
+
"dashboard.results.listResources": "",
|
|
18648
18644
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18649
18645
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18650
18646
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18730,6 +18726,7 @@ var pt = {
|
|
|
18730
18726
|
"datahub.news.contact.title": "",
|
|
18731
18727
|
"datahub.news.feed": "",
|
|
18732
18728
|
"datahub.news.figures": "",
|
|
18729
|
+
"datahub.record.addToFavorites": "",
|
|
18733
18730
|
"datahub.search.back": "",
|
|
18734
18731
|
"datahub.search.filter.all": "",
|
|
18735
18732
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18790,10 +18787,18 @@ var pt = {
|
|
|
18790
18787
|
"map.add.layer.file": "",
|
|
18791
18788
|
"map.add.layer.wfs": "",
|
|
18792
18789
|
"map.add.layer.wms": "",
|
|
18790
|
+
"map.addFromFile.placeholder": "",
|
|
18791
|
+
"map.geocoding.placeholder": "",
|
|
18792
|
+
"map.help.addFromFile": "",
|
|
18793
|
+
"map.layer.add": "",
|
|
18794
|
+
"map.layers.available": "",
|
|
18793
18795
|
"map.layers.list": "",
|
|
18794
18796
|
"map.loading.data": "",
|
|
18797
|
+
"map.loading.service": "",
|
|
18795
18798
|
"map.navigation.message": "",
|
|
18796
18799
|
"map.select.layer": "",
|
|
18800
|
+
"map.wfs.urlInput.hint": "",
|
|
18801
|
+
"map.wms.urlInput.hint": "",
|
|
18797
18802
|
"multiselect.filter.placeholder": "",
|
|
18798
18803
|
"nav.back": "",
|
|
18799
18804
|
next: next,
|
|
@@ -18827,15 +18832,16 @@ var pt = {
|
|
|
18827
18832
|
"record.metadata.author": "",
|
|
18828
18833
|
"record.metadata.catalog": "",
|
|
18829
18834
|
"record.metadata.contact": "",
|
|
18830
|
-
"record.metadata.createdOn": "",
|
|
18831
18835
|
"record.metadata.details": "",
|
|
18832
18836
|
"record.metadata.download": "",
|
|
18833
18837
|
"record.metadata.formats": "",
|
|
18834
|
-
"record.metadata.isOpenData": "",
|
|
18835
18838
|
"record.metadata.keywords": "",
|
|
18839
|
+
"record.metadata.lastUpdate": "",
|
|
18836
18840
|
"record.metadata.links": "",
|
|
18837
18841
|
"record.metadata.noUsage": "",
|
|
18838
18842
|
"record.metadata.origin": "",
|
|
18843
|
+
"record.metadata.otherConstraints": "",
|
|
18844
|
+
"record.metadata.owner": "",
|
|
18839
18845
|
"record.metadata.preview": "",
|
|
18840
18846
|
"record.metadata.publications": "",
|
|
18841
18847
|
"record.metadata.quality": "",
|
|
@@ -18858,7 +18864,11 @@ var pt = {
|
|
|
18858
18864
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18859
18865
|
"record.metadata.related": "",
|
|
18860
18866
|
"record.metadata.sheet": "",
|
|
18867
|
+
"record.metadata.status": "",
|
|
18868
|
+
"record.metadata.themes": "",
|
|
18861
18869
|
"record.metadata.title": "",
|
|
18870
|
+
"record.metadata.type": "",
|
|
18871
|
+
"record.metadata.uniqueId": "",
|
|
18862
18872
|
"record.metadata.updateFrequency": "",
|
|
18863
18873
|
"record.metadata.updateStatus": "",
|
|
18864
18874
|
"record.metadata.updatedOn": "",
|
|
@@ -18892,6 +18902,7 @@ var pt = {
|
|
|
18892
18902
|
"search.filters.isSpatial": "",
|
|
18893
18903
|
"search.filters.isSpatial.no": "",
|
|
18894
18904
|
"search.filters.isSpatial.yes": "",
|
|
18905
|
+
"search.filters.keyword": "",
|
|
18895
18906
|
"search.filters.license": "",
|
|
18896
18907
|
"search.filters.license.cc-by": "",
|
|
18897
18908
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18922,6 +18933,7 @@ var pt = {
|
|
|
18922
18933
|
"table.object.count": "",
|
|
18923
18934
|
"table.select.data": "",
|
|
18924
18935
|
"tooltip.html.copy": "",
|
|
18936
|
+
"tooltip.id.copy": "",
|
|
18925
18937
|
"tooltip.url.copy": "",
|
|
18926
18938
|
"tooltip.url.open": "",
|
|
18927
18939
|
"ui.readLess": "",
|
|
@@ -19066,20 +19078,11 @@ class Gn4FieldMapper {
|
|
|
19066
19078
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19067
19079
|
],
|
|
19068
19080
|
}),
|
|
19069
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19070
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19071
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19072
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19073
|
-
licenseObject: (output, source) => (
|
|
19074
|
-
...output,
|
|
19075
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19076
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19077
|
-
return {
|
|
19078
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19079
|
-
...(link ? { link } : {}),
|
|
19080
|
-
};
|
|
19081
|
-
}),
|
|
19082
|
-
}),
|
|
19081
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19082
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19083
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19084
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19085
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19083
19086
|
lineageObject: (output, source) => ({
|
|
19084
19087
|
...output,
|
|
19085
19088
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19105,33 +19108,78 @@ class Gn4FieldMapper {
|
|
|
19105
19108
|
kind,
|
|
19106
19109
|
};
|
|
19107
19110
|
},
|
|
19111
|
+
geom: (output, source) => {
|
|
19112
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19113
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19114
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19115
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19116
|
+
return {
|
|
19117
|
+
...output,
|
|
19118
|
+
spatialExtents: [
|
|
19119
|
+
...spatialExtents,
|
|
19120
|
+
...geoms.map((geom, index) => {
|
|
19121
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19122
|
+
const geometry = shapes[index] ?? geom;
|
|
19123
|
+
return {
|
|
19124
|
+
...(description !== null ? { description } : null),
|
|
19125
|
+
geometry,
|
|
19126
|
+
};
|
|
19127
|
+
}),
|
|
19128
|
+
],
|
|
19129
|
+
};
|
|
19130
|
+
},
|
|
19131
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19132
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19133
|
+
return {
|
|
19134
|
+
...output,
|
|
19135
|
+
temporalExtents: ranges.map((range) => {
|
|
19136
|
+
const start = selectField(range, 'gte');
|
|
19137
|
+
const end = selectField(range, 'lte');
|
|
19138
|
+
return {
|
|
19139
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19140
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19141
|
+
};
|
|
19142
|
+
}),
|
|
19143
|
+
};
|
|
19144
|
+
},
|
|
19108
19145
|
};
|
|
19109
19146
|
this.genericField = (output) => output;
|
|
19110
|
-
this.constraintField = (
|
|
19111
|
-
|
|
19112
|
-
|
|
19113
|
-
|
|
19114
|
-
|
|
19115
|
-
|
|
19116
|
-
|
|
19117
|
-
|
|
19118
|
-
|
|
19119
|
-
|
|
19120
|
-
|
|
19121
|
-
|
|
19122
|
-
|
|
19123
|
-
|
|
19124
|
-
|
|
19125
|
-
|
|
19126
|
-
|
|
19127
|
-
|
|
19128
|
-
|
|
19129
|
-
|
|
19130
|
-
|
|
19131
|
-
|
|
19132
|
-
|
|
19133
|
-
}
|
|
19134
|
-
|
|
19147
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19148
|
+
let outputField;
|
|
19149
|
+
switch (type) {
|
|
19150
|
+
case 'license':
|
|
19151
|
+
outputField = 'licenses';
|
|
19152
|
+
break;
|
|
19153
|
+
case 'legal':
|
|
19154
|
+
outputField = 'legalConstraints';
|
|
19155
|
+
break;
|
|
19156
|
+
case 'security':
|
|
19157
|
+
outputField = 'securityConstraints';
|
|
19158
|
+
break;
|
|
19159
|
+
case 'other':
|
|
19160
|
+
outputField = 'otherConstraints';
|
|
19161
|
+
break;
|
|
19162
|
+
}
|
|
19163
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19164
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19165
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19166
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19167
|
+
return {
|
|
19168
|
+
text,
|
|
19169
|
+
...(url ? { url } : {}),
|
|
19170
|
+
};
|
|
19171
|
+
}));
|
|
19172
|
+
const result = {
|
|
19173
|
+
...output,
|
|
19174
|
+
[outputField]: outputArray,
|
|
19175
|
+
};
|
|
19176
|
+
// avoid legal constraints being duplicates of licenses
|
|
19177
|
+
if ('legalConstraints' in result &&
|
|
19178
|
+
(type === 'legal' || type === 'license')) {
|
|
19179
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19180
|
+
}
|
|
19181
|
+
return result;
|
|
19182
|
+
};
|
|
19135
19183
|
this.mapLink = (sourceLink) => {
|
|
19136
19184
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19137
19185
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19179,17 +19227,6 @@ class Gn4FieldMapper {
|
|
|
19179
19227
|
extras: { ...(output.extras || {}), ...value },
|
|
19180
19228
|
});
|
|
19181
19229
|
}
|
|
19182
|
-
getConstraintsType(indexField) {
|
|
19183
|
-
switch (indexField) {
|
|
19184
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19185
|
-
return 'legal';
|
|
19186
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19187
|
-
return 'security';
|
|
19188
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19189
|
-
default:
|
|
19190
|
-
return 'other';
|
|
19191
|
-
}
|
|
19192
|
-
}
|
|
19193
19230
|
getMappingFn(fieldName) {
|
|
19194
19231
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19195
19232
|
}
|
|
@@ -19251,14 +19288,16 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19251
19288
|
recordUpdated: null,
|
|
19252
19289
|
ownerOrganization: null,
|
|
19253
19290
|
licenses: [],
|
|
19291
|
+
legalConstraints: [],
|
|
19292
|
+
securityConstraints: [],
|
|
19293
|
+
otherConstraints: [],
|
|
19254
19294
|
contacts: [],
|
|
19255
19295
|
contactsForResource: [],
|
|
19256
|
-
accessConstraints: [],
|
|
19257
19296
|
keywords: [],
|
|
19258
19297
|
themes: [],
|
|
19259
|
-
useLimitations: [],
|
|
19260
19298
|
spatialExtents: [],
|
|
19261
19299
|
temporalExtents: [],
|
|
19300
|
+
overviews: [],
|
|
19262
19301
|
};
|
|
19263
19302
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19264
19303
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -20023,11 +20062,18 @@ class OrganizationsFromMetadataService {
|
|
|
20023
20062
|
if (!allContactOrgs.length)
|
|
20024
20063
|
return of(record);
|
|
20025
20064
|
const ownerOrganization = allContactOrgs[0];
|
|
20026
|
-
|
|
20065
|
+
// read the owner group as well to have a fallback logo
|
|
20066
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20067
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20068
|
+
return group.id === Number(groupId);
|
|
20069
|
+
})));
|
|
20070
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20027
20071
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20072
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20028
20073
|
return {
|
|
20029
20074
|
...record,
|
|
20030
20075
|
ownerOrganization: {
|
|
20076
|
+
logoUrl,
|
|
20031
20077
|
...ownerOrganization,
|
|
20032
20078
|
...recordOrganisation,
|
|
20033
20079
|
},
|
|
@@ -20292,36 +20338,23 @@ class SelectionService {
|
|
|
20292
20338
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20293
20339
|
}
|
|
20294
20340
|
selectRecords(records) {
|
|
20295
|
-
const newIds =
|
|
20296
|
-
|
|
20297
|
-
newIds.push(record.uniqueIdentifier);
|
|
20298
|
-
});
|
|
20299
|
-
const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
|
|
20300
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20341
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20342
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20301
20343
|
this.addIdsToSelected(newIds);
|
|
20302
|
-
})
|
|
20344
|
+
});
|
|
20303
20345
|
}
|
|
20304
20346
|
deselectRecords(records) {
|
|
20305
|
-
const idsToBeRemoved =
|
|
20306
|
-
|
|
20307
|
-
idsToBeRemoved.push(record.uniqueIdentifier);
|
|
20308
|
-
});
|
|
20309
|
-
const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
|
|
20310
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20347
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20348
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20311
20349
|
this.removeIdsFromSelected(idsToBeRemoved);
|
|
20312
|
-
}), map$2(() => undefined));
|
|
20313
|
-
}
|
|
20314
|
-
clearSelection() {
|
|
20315
|
-
const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
|
|
20316
|
-
let currentSelection;
|
|
20317
|
-
this.subscription = currentSelectedResponse.subscribe((value) => {
|
|
20318
|
-
currentSelection = [...value];
|
|
20319
20350
|
});
|
|
20320
|
-
|
|
20321
|
-
|
|
20322
|
-
|
|
20351
|
+
}
|
|
20352
|
+
async clearSelection() {
|
|
20353
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20354
|
+
const currentSelection = Array.from(response);
|
|
20355
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20323
20356
|
this.removeIdsFromSelected(currentSelection);
|
|
20324
|
-
})
|
|
20357
|
+
});
|
|
20325
20358
|
}
|
|
20326
20359
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20327
20360
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20351,12 +20384,21 @@ class Gn4PlatformMapper {
|
|
|
20351
20384
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20352
20385
|
return { ...apiUser, id: id.toString() };
|
|
20353
20386
|
}
|
|
20354
|
-
thesaurusFromApi(thesaurus) {
|
|
20387
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20355
20388
|
return thesaurus.map((keyword) => {
|
|
20356
|
-
|
|
20389
|
+
let key = keyword.uri;
|
|
20390
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20391
|
+
if (key.indexOf('@@@') > -1) {
|
|
20392
|
+
key = key.split('@@@')[1];
|
|
20393
|
+
}
|
|
20394
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20395
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20396
|
+
? keyword.definitions[lang3]
|
|
20397
|
+
: keyword.definition;
|
|
20357
20398
|
return {
|
|
20358
|
-
key
|
|
20359
|
-
label
|
|
20399
|
+
key,
|
|
20400
|
+
label,
|
|
20401
|
+
description,
|
|
20360
20402
|
};
|
|
20361
20403
|
});
|
|
20362
20404
|
}
|
|
@@ -20369,13 +20411,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20369
20411
|
|
|
20370
20412
|
const minApiVersion = '4.2.2';
|
|
20371
20413
|
class Gn4PlatformService {
|
|
20372
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20414
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20373
20415
|
this.siteApiService = siteApiService;
|
|
20374
20416
|
this.meApi = meApi;
|
|
20375
20417
|
this.usersApi = usersApi;
|
|
20376
20418
|
this.mapper = mapper;
|
|
20377
20419
|
this.toolsApiService = toolsApiService;
|
|
20378
20420
|
this.registriesApiService = registriesApiService;
|
|
20421
|
+
this.langService = langService;
|
|
20379
20422
|
this.type = 'GeoNetwork';
|
|
20380
20423
|
this.keyTranslations$ = this.toolsApiService
|
|
20381
20424
|
.getTranslationsPackage1('gnui')
|
|
@@ -20389,6 +20432,11 @@ class Gn4PlatformService {
|
|
|
20389
20432
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20390
20433
|
}
|
|
20391
20434
|
}), shareReplay(1));
|
|
20435
|
+
/**
|
|
20436
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20437
|
+
* @private
|
|
20438
|
+
*/
|
|
20439
|
+
this.thesauri = {};
|
|
20392
20440
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20393
20441
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20394
20442
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20415,19 +20463,36 @@ class Gn4PlatformService {
|
|
|
20415
20463
|
return this.users$;
|
|
20416
20464
|
}
|
|
20417
20465
|
translateKey(key) {
|
|
20466
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20467
|
+
if (key.match(/^https?:\/\//)) {
|
|
20468
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20469
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20470
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20471
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20472
|
+
for (const item of thesaurus) {
|
|
20473
|
+
if (item.key === key)
|
|
20474
|
+
return item.label;
|
|
20475
|
+
}
|
|
20476
|
+
return key;
|
|
20477
|
+
}));
|
|
20478
|
+
}
|
|
20418
20479
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20419
20480
|
}
|
|
20420
|
-
|
|
20421
|
-
|
|
20422
|
-
.
|
|
20423
|
-
|
|
20481
|
+
getThesaurusByUri(uri) {
|
|
20482
|
+
if (this.thesauri[uri]) {
|
|
20483
|
+
return this.thesauri[uri];
|
|
20484
|
+
}
|
|
20485
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20486
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20487
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20488
|
+
return this.thesauri[uri];
|
|
20424
20489
|
}
|
|
20425
|
-
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 }); }
|
|
20490
|
+
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 }); }
|
|
20426
20491
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20427
20492
|
}
|
|
20428
20493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20429
20494
|
type: Injectable
|
|
20430
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20495
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20431
20496
|
|
|
20432
20497
|
function provideGn4() {
|
|
20433
20498
|
return [
|
|
@@ -20639,6 +20704,8 @@ const defaultMapOptions = {
|
|
|
20639
20704
|
};
|
|
20640
20705
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20641
20706
|
|
|
20707
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20708
|
+
|
|
20642
20709
|
var MapContextLayerTypeEnum;
|
|
20643
20710
|
(function (MapContextLayerTypeEnum) {
|
|
20644
20711
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -20946,6 +21013,33 @@ function propagateToDocumentOnly(event) {
|
|
|
20946
21013
|
}, 0);
|
|
20947
21014
|
}
|
|
20948
21015
|
|
|
21016
|
+
function normalize(input) {
|
|
21017
|
+
return input
|
|
21018
|
+
.toLowerCase()
|
|
21019
|
+
.normalize('NFD') // explode composite chars (e.g. é) into multiple chars
|
|
21020
|
+
.replace(/[\u0300-\u036f]/g, '') // remove accents
|
|
21021
|
+
.replace(/œ/g, 'oe') // remove accents
|
|
21022
|
+
.replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
|
|
21023
|
+
}
|
|
21024
|
+
function asNormalizedParts(input) {
|
|
21025
|
+
return normalize(input)
|
|
21026
|
+
.split(/\s+/)
|
|
21027
|
+
.map((part) => part.trim())
|
|
21028
|
+
.filter((part) => part.length > 0);
|
|
21029
|
+
}
|
|
21030
|
+
/**
|
|
21031
|
+
* This creates a filter function based on a pattern (typically a user-input
|
|
21032
|
+
* search text).
|
|
21033
|
+
* @param pattern
|
|
21034
|
+
*/
|
|
21035
|
+
function createFuzzyFilter(pattern) {
|
|
21036
|
+
const patternParts = asNormalizedParts(pattern);
|
|
21037
|
+
return (input) => {
|
|
21038
|
+
const inputParts = asNormalizedParts(input);
|
|
21039
|
+
return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
|
|
21040
|
+
};
|
|
21041
|
+
}
|
|
21042
|
+
|
|
20949
21043
|
marker('downloads.wfs.featuretype.not.found');
|
|
20950
21044
|
const FORMATS = {
|
|
20951
21045
|
csv: {
|
|
@@ -20987,9 +21081,15 @@ const FORMATS = {
|
|
|
20987
21081
|
color: '#328556',
|
|
20988
21082
|
mimeTypes: ['x-gis/x-shapefile'],
|
|
20989
21083
|
},
|
|
21084
|
+
gml: {
|
|
21085
|
+
extensions: ['gml'],
|
|
21086
|
+
priority: 5,
|
|
21087
|
+
color: '#c92bce',
|
|
21088
|
+
mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
|
|
21089
|
+
},
|
|
20990
21090
|
kml: {
|
|
20991
21091
|
extensions: ['kml', 'kmz'],
|
|
20992
|
-
priority:
|
|
21092
|
+
priority: 6,
|
|
20993
21093
|
color: '#348009',
|
|
20994
21094
|
mimeTypes: [
|
|
20995
21095
|
'application/vnd.google-earth.kml+xml',
|
|
@@ -20998,34 +21098,40 @@ const FORMATS = {
|
|
|
20998
21098
|
},
|
|
20999
21099
|
gpkg: {
|
|
21000
21100
|
extensions: ['gpkg', 'geopackage'],
|
|
21001
|
-
priority:
|
|
21101
|
+
priority: 7,
|
|
21002
21102
|
color: '#ea79ba',
|
|
21003
21103
|
mimeTypes: ['application/geopackage+sqlite3'],
|
|
21004
21104
|
},
|
|
21005
21105
|
zip: {
|
|
21006
21106
|
extensions: ['zip', 'tar.gz'],
|
|
21007
|
-
priority:
|
|
21107
|
+
priority: 8,
|
|
21008
21108
|
color: '#f2bb3a',
|
|
21009
21109
|
mimeTypes: ['application/zip', 'application/x-zip'],
|
|
21010
21110
|
},
|
|
21011
21111
|
pdf: {
|
|
21012
21112
|
extensions: ['pdf'],
|
|
21013
|
-
priority:
|
|
21113
|
+
priority: 9,
|
|
21014
21114
|
color: '#db544a',
|
|
21015
21115
|
mimeTypes: ['application/pdf'],
|
|
21016
21116
|
},
|
|
21017
21117
|
jpg: {
|
|
21018
21118
|
extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
|
|
21019
|
-
priority:
|
|
21119
|
+
priority: 9,
|
|
21020
21120
|
color: '#673ab7',
|
|
21021
21121
|
mimeTypes: ['image/jpg'],
|
|
21022
21122
|
},
|
|
21023
21123
|
svg: {
|
|
21024
21124
|
extensions: ['svg'],
|
|
21025
|
-
priority:
|
|
21125
|
+
priority: 10,
|
|
21026
21126
|
color: '#d98294',
|
|
21027
21127
|
mimeTypes: ['image/svg+xml'],
|
|
21028
21128
|
},
|
|
21129
|
+
dxf: {
|
|
21130
|
+
extensions: ['dxf'],
|
|
21131
|
+
priority: 11,
|
|
21132
|
+
color: '#de630b',
|
|
21133
|
+
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
21134
|
+
},
|
|
21029
21135
|
};
|
|
21030
21136
|
function getFormatPriority(linkFormat) {
|
|
21031
21137
|
for (const format in FORMATS) {
|
|
@@ -21042,14 +21148,18 @@ function getFormatPriority(linkFormat) {
|
|
|
21042
21148
|
function getLinkPriority(link) {
|
|
21043
21149
|
return getFormatPriority(getFileFormat(link));
|
|
21044
21150
|
}
|
|
21045
|
-
function
|
|
21046
|
-
|
|
21047
|
-
|
|
21048
|
-
|
|
21049
|
-
|
|
21151
|
+
function getFileFormatFromServiceOutput(serviceOutput) {
|
|
21152
|
+
function formatMatcher(format) {
|
|
21153
|
+
const output = serviceOutput.toLowerCase();
|
|
21154
|
+
return (format.extensions.some((extension) => output.includes(extension)) ||
|
|
21155
|
+
format.mimeTypes.some((mimeType) => output.includes(mimeType)));
|
|
21156
|
+
}
|
|
21157
|
+
for (const formatName in FORMATS) {
|
|
21158
|
+
if (formatMatcher(FORMATS[formatName])) {
|
|
21159
|
+
return formatName;
|
|
21050
21160
|
}
|
|
21051
21161
|
}
|
|
21052
|
-
return
|
|
21162
|
+
return null;
|
|
21053
21163
|
}
|
|
21054
21164
|
function getFileFormat(link) {
|
|
21055
21165
|
if ('mimeType' in link) {
|
|
@@ -21190,72 +21300,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21190
21300
|
}]
|
|
21191
21301
|
}] });
|
|
21192
21302
|
|
|
21193
|
-
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
21194
|
-
|
|
21195
|
-
class MapUtilsWMSService {
|
|
21196
|
-
constructor(proxy) {
|
|
21197
|
-
this.proxy = proxy;
|
|
21198
|
-
}
|
|
21199
|
-
getCapabilities(layer) {
|
|
21200
|
-
return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
|
|
21201
|
-
}
|
|
21202
|
-
getLayerFull(layer) {
|
|
21203
|
-
return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
|
|
21204
|
-
}
|
|
21205
|
-
getLayerLonLatBBox(layer) {
|
|
21206
|
-
return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
|
|
21207
|
-
}
|
|
21208
|
-
async getLonLatBBox(wmsLayerFull) {
|
|
21209
|
-
const { boundingBoxes } = wmsLayerFull;
|
|
21210
|
-
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21211
|
-
if (lonLatCRS) {
|
|
21212
|
-
return boundingBoxes[lonLatCRS];
|
|
21213
|
-
}
|
|
21214
|
-
else {
|
|
21215
|
-
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21216
|
-
register(proj4);
|
|
21217
|
-
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21218
|
-
proj4.defs(availableEPSGCode, proj);
|
|
21219
|
-
const bboxWithFiniteNumbers = [
|
|
21220
|
-
parseFloat(boundingBoxes[availableEPSGCode][0]),
|
|
21221
|
-
parseFloat(boundingBoxes[availableEPSGCode][1]),
|
|
21222
|
-
parseFloat(boundingBoxes[availableEPSGCode][2]),
|
|
21223
|
-
parseFloat(boundingBoxes[availableEPSGCode][3]),
|
|
21224
|
-
];
|
|
21225
|
-
const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21226
|
-
return extent;
|
|
21227
|
-
}
|
|
21228
|
-
}
|
|
21229
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21230
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
|
|
21231
|
-
}
|
|
21232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
|
|
21233
|
-
type: Injectable,
|
|
21234
|
-
args: [{
|
|
21235
|
-
providedIn: 'root',
|
|
21236
|
-
}]
|
|
21237
|
-
}], ctorParameters: function () { return [{ type: ProxyService }]; } });
|
|
21238
|
-
|
|
21239
21303
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21240
21304
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21305
|
+
const GEOJSON = new GeoJSON();
|
|
21241
21306
|
class MapUtilsService {
|
|
21242
|
-
constructor(http,
|
|
21307
|
+
constructor(http, proxy) {
|
|
21243
21308
|
this.http = http;
|
|
21244
|
-
this.
|
|
21309
|
+
this.proxy = proxy;
|
|
21245
21310
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21246
|
-
|
|
21311
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21247
21312
|
featureProjection,
|
|
21248
21313
|
dataProjection,
|
|
21249
21314
|
});
|
|
21250
|
-
return olFeatures;
|
|
21251
21315
|
};
|
|
21252
21316
|
}
|
|
21253
21317
|
createEmptyMap() {
|
|
21254
|
-
|
|
21318
|
+
return new Map$1({
|
|
21255
21319
|
controls: [],
|
|
21256
21320
|
pixelRatio: 1,
|
|
21257
21321
|
});
|
|
21258
|
-
return map;
|
|
21259
21322
|
}
|
|
21260
21323
|
isWMSLayer(layer) {
|
|
21261
21324
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21270,8 +21333,7 @@ class MapUtilsService {
|
|
|
21270
21333
|
...source.getParams(),
|
|
21271
21334
|
INFO_FORMAT: 'application/json',
|
|
21272
21335
|
};
|
|
21273
|
-
|
|
21274
|
-
return url;
|
|
21336
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21275
21337
|
}
|
|
21276
21338
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21277
21339
|
const features = [];
|
|
@@ -21299,38 +21361,56 @@ class MapUtilsService {
|
|
|
21299
21361
|
/**
|
|
21300
21362
|
* Will emit `null` if no extent could be computed
|
|
21301
21363
|
*/
|
|
21302
|
-
getLayerExtent(layer) {
|
|
21303
|
-
let
|
|
21364
|
+
async getLayerExtent(layer) {
|
|
21365
|
+
let latLonExtent;
|
|
21304
21366
|
if (layer &&
|
|
21305
21367
|
layer.type === 'geojson' &&
|
|
21306
21368
|
'data' in layer &&
|
|
21307
21369
|
typeof layer.data === 'object' &&
|
|
21308
21370
|
layer.data.features[0] &&
|
|
21309
21371
|
layer.data.features[0].geometry) {
|
|
21310
|
-
|
|
21311
|
-
.readFeatures(
|
|
21372
|
+
latLonExtent = new GeoJSON()
|
|
21373
|
+
.readFeatures(layer.data)
|
|
21312
21374
|
.map((feature) => feature.getGeometry())
|
|
21313
21375
|
.filter((geom) => !!geom)
|
|
21314
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21376
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21315
21377
|
}
|
|
21316
21378
|
else if (layer && layer.type === 'wms') {
|
|
21317
|
-
|
|
21379
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21318
21380
|
}
|
|
21319
21381
|
else if (layer && layer.type === 'wmts') {
|
|
21320
21382
|
if (layer.extent) {
|
|
21321
|
-
|
|
21383
|
+
latLonExtent = layer.extent;
|
|
21322
21384
|
}
|
|
21323
21385
|
else {
|
|
21324
|
-
return
|
|
21386
|
+
return layer.options.tileGrid.getExtent();
|
|
21325
21387
|
}
|
|
21326
21388
|
}
|
|
21327
21389
|
else {
|
|
21328
|
-
return
|
|
21390
|
+
return null;
|
|
21391
|
+
}
|
|
21392
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21393
|
+
return null;
|
|
21394
|
+
}
|
|
21395
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21396
|
+
}
|
|
21397
|
+
async getWmsLayerExtent(layer) {
|
|
21398
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21399
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21400
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21401
|
+
return null;
|
|
21402
|
+
}
|
|
21403
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21404
|
+
if (lonLatCRS) {
|
|
21405
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21406
|
+
}
|
|
21407
|
+
else {
|
|
21408
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21409
|
+
register(proj4);
|
|
21410
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21411
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21412
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21329
21413
|
}
|
|
21330
|
-
return geographicExtent.pipe(map$1((extent) => [
|
|
21331
|
-
...fromLonLat([extent[0], extent[1]], 'EPSG:3857'),
|
|
21332
|
-
...fromLonLat([extent[2], extent[3]], 'EPSG:3857'),
|
|
21333
|
-
]), map$1((extent) => (isEmpty(extent) ? null : extent)));
|
|
21334
21414
|
}
|
|
21335
21415
|
getWmtsLayerFromCapabilities(link) {
|
|
21336
21416
|
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
@@ -21386,7 +21466,18 @@ ${e.stack || e.message || e}`);
|
|
|
21386
21466
|
])
|
|
21387
21467
|
.getArray());
|
|
21388
21468
|
}
|
|
21389
|
-
|
|
21469
|
+
getRecordExtent(record) {
|
|
21470
|
+
if (!('spatialExtents' in record)) {
|
|
21471
|
+
return null;
|
|
21472
|
+
}
|
|
21473
|
+
// transform an array of geojson geometries into a bbox
|
|
21474
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21475
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21476
|
+
return extend(prev, geom.getExtent());
|
|
21477
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21478
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21479
|
+
}
|
|
21480
|
+
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 }); }
|
|
21390
21481
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21391
21482
|
}
|
|
21392
21483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21394,7 +21485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21394
21485
|
args: [{
|
|
21395
21486
|
providedIn: 'root',
|
|
21396
21487
|
}]
|
|
21397
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21488
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21398
21489
|
function dragPanCondition(event) {
|
|
21399
21490
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21400
21491
|
if (!dragPanCondition) {
|
|
@@ -22469,6 +22560,7 @@ const DEFAULT_VIEW = {
|
|
|
22469
22560
|
center: [0, 15],
|
|
22470
22561
|
zoom: 2,
|
|
22471
22562
|
};
|
|
22563
|
+
const WFS_MAX_FEATURES = 10000;
|
|
22472
22564
|
class MapContextService {
|
|
22473
22565
|
constructor(mapUtils, styleService) {
|
|
22474
22566
|
this.mapUtils = mapUtils;
|
|
@@ -22478,6 +22570,9 @@ class MapContextService {
|
|
|
22478
22570
|
if (mapConfig) {
|
|
22479
22571
|
mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
|
|
22480
22572
|
}
|
|
22573
|
+
else {
|
|
22574
|
+
mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
|
|
22575
|
+
}
|
|
22481
22576
|
if (!mapContext.view?.extent &&
|
|
22482
22577
|
(!mapContext.view?.center || !mapContext.view?.zoom)) {
|
|
22483
22578
|
mapContext.view = this.getFallbackView(mapConfig);
|
|
@@ -22527,6 +22622,7 @@ class MapContextService {
|
|
|
22527
22622
|
urlObj.searchParams.set('typename', layerModel.name);
|
|
22528
22623
|
urlObj.searchParams.set('srsname', 'EPSG:3857');
|
|
22529
22624
|
urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
|
|
22625
|
+
urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
|
|
22530
22626
|
return urlObj.toString();
|
|
22531
22627
|
},
|
|
22532
22628
|
strategy: bbox,
|
|
@@ -22587,6 +22683,11 @@ class MapContextService {
|
|
|
22587
22683
|
}
|
|
22588
22684
|
return view;
|
|
22589
22685
|
}
|
|
22686
|
+
addDefaultBaselayerContext(layers) {
|
|
22687
|
+
return layers.includes(DEFAULT_BASELAYER_CONTEXT)
|
|
22688
|
+
? layers
|
|
22689
|
+
: [DEFAULT_BASELAYER_CONTEXT, ...layers];
|
|
22690
|
+
}
|
|
22590
22691
|
mergeMapConfigWithContext(mapContext, mapConfig) {
|
|
22591
22692
|
return {
|
|
22592
22693
|
...mapContext,
|
|
@@ -23074,6 +23175,7 @@ class ThumbnailComponent {
|
|
|
23074
23175
|
constructor(optionalPlaceholderUrl) {
|
|
23075
23176
|
this.optionalPlaceholderUrl = optionalPlaceholderUrl;
|
|
23076
23177
|
this.fit = 'cover';
|
|
23178
|
+
this.placeholderShown = new EventEmitter();
|
|
23077
23179
|
this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
|
|
23078
23180
|
this.images = [];
|
|
23079
23181
|
}
|
|
@@ -23109,6 +23211,7 @@ class ThumbnailComponent {
|
|
|
23109
23211
|
setNewSrcImage(image) {
|
|
23110
23212
|
this.imgFit = image.fit;
|
|
23111
23213
|
this.imgUrl = image.url;
|
|
23214
|
+
this.placeholderShown.emit(this.isPlaceholder);
|
|
23112
23215
|
}
|
|
23113
23216
|
setPlaceholder() {
|
|
23114
23217
|
this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
|
|
@@ -23131,7 +23234,7 @@ class ThumbnailComponent {
|
|
|
23131
23234
|
}
|
|
23132
23235
|
}
|
|
23133
23236
|
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 }); }
|
|
23134
|
-
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 }); }
|
|
23237
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23135
23238
|
}
|
|
23136
23239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23137
23240
|
type: Component,
|
|
@@ -23151,11 +23254,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23151
23254
|
}], containerElement: [{
|
|
23152
23255
|
type: ViewChild,
|
|
23153
23256
|
args: ['containerElement']
|
|
23257
|
+
}], placeholderShown: [{
|
|
23258
|
+
type: Output
|
|
23154
23259
|
}] } });
|
|
23155
23260
|
|
|
23156
23261
|
class RecordPreviewCardComponent extends RecordPreviewComponent {
|
|
23157
23262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23158
|
-
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 }); }
|
|
23263
|
+
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 }); }
|
|
23159
23264
|
}
|
|
23160
23265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
|
|
23161
23266
|
type: Component,
|
|
@@ -23164,7 +23269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23164
23269
|
|
|
23165
23270
|
class RecordPreviewListComponent extends RecordPreviewComponent {
|
|
23166
23271
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23167
|
-
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 }); }
|
|
23272
|
+
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 }); }
|
|
23168
23273
|
}
|
|
23169
23274
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
|
|
23170
23275
|
type: Component,
|
|
@@ -23261,8 +23366,7 @@ class MetadataQualityComponent {
|
|
|
23261
23366
|
: this.calculatedQualityScore;
|
|
23262
23367
|
}
|
|
23263
23368
|
get calculatedQualityScore() {
|
|
23264
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23265
|
-
this.items.length);
|
|
23369
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23266
23370
|
}
|
|
23267
23371
|
showMenu() {
|
|
23268
23372
|
this.isMenuShown = true;
|
|
@@ -23312,7 +23416,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
23312
23416
|
this.elementRef = elementRef;
|
|
23313
23417
|
}
|
|
23314
23418
|
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 }); }
|
|
23315
|
-
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 }); }
|
|
23419
|
+
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 }); }
|
|
23316
23420
|
}
|
|
23317
23421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
23318
23422
|
type: Component,
|
|
@@ -23330,7 +23434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23330
23434
|
|
|
23331
23435
|
class RecordPreviewTitleComponent extends RecordPreviewComponent {
|
|
23332
23436
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23333
|
-
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 }); }
|
|
23437
|
+
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 }); }
|
|
23334
23438
|
}
|
|
23335
23439
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
|
|
23336
23440
|
type: Component,
|
|
@@ -23370,7 +23474,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
|
|
|
23370
23474
|
return this.timeFormat.format(this.record.recordCreated, Date.now());
|
|
23371
23475
|
}
|
|
23372
23476
|
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 }); }
|
|
23373
|
-
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 }); }
|
|
23477
|
+
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 }); }
|
|
23374
23478
|
}
|
|
23375
23479
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
|
|
23376
23480
|
type: Component,
|
|
@@ -23703,9 +23807,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23703
23807
|
args: ['contentDiv']
|
|
23704
23808
|
}] } });
|
|
23705
23809
|
|
|
23706
|
-
class
|
|
23810
|
+
class CopyTextButtonComponent {
|
|
23707
23811
|
constructor() {
|
|
23708
|
-
this.
|
|
23812
|
+
this.displayText = true;
|
|
23813
|
+
this.rows = 1;
|
|
23814
|
+
}
|
|
23815
|
+
copyText(event) {
|
|
23816
|
+
navigator.clipboard.writeText(this.text);
|
|
23817
|
+
event.target.blur();
|
|
23818
|
+
}
|
|
23819
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23820
|
+
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 }); }
|
|
23821
|
+
}
|
|
23822
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
23823
|
+
type: Component,
|
|
23824
|
+
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" }]
|
|
23825
|
+
}], propDecorators: { text: [{
|
|
23826
|
+
type: Input
|
|
23827
|
+
}], tooltipText: [{
|
|
23828
|
+
type: Input
|
|
23829
|
+
}], displayText: [{
|
|
23830
|
+
type: Input
|
|
23831
|
+
}], rows: [{
|
|
23832
|
+
type: Input
|
|
23833
|
+
}] } });
|
|
23834
|
+
|
|
23835
|
+
class MarkdownParserComponent {
|
|
23836
|
+
get parsedMarkdown() {
|
|
23837
|
+
return marked.parse(this.textContent);
|
|
23838
|
+
}
|
|
23839
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23840
|
+
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 }); }
|
|
23841
|
+
}
|
|
23842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23843
|
+
type: Component,
|
|
23844
|
+
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"] }]
|
|
23845
|
+
}], propDecorators: { textContent: [{
|
|
23846
|
+
type: Input
|
|
23847
|
+
}] } });
|
|
23848
|
+
|
|
23849
|
+
class ContentGhostComponent {
|
|
23850
|
+
constructor() {
|
|
23851
|
+
this.ghostClass = '';
|
|
23709
23852
|
}
|
|
23710
23853
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23711
23854
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: { showContent: "showContent", ghostClass: "ghostClass" }, ngImport: i0, template: "<div\n *ngIf=\"!showContent\"\n class=\"ghost bg-gray-100 rounded-lg relative overflow-hidden {{ ghostClass }}\"\n></div>\n<ng-content *ngIf=\"showContent\"></ng-content>\n", styles: [".ghost{min-height:2rem;min-width:2rem;overflow:hidden}.ghost:after{content:\"\";position:absolute;top:0;bottom:0;width:50%;background-image:linear-gradient(to left,rgba(251,251,251,.05),rgba(251,251,251,.3),rgba(251,251,251,.6),rgba(251,251,251,.3),rgba(251,251,251,.05));animation:loading 1s infinite}@keyframes loading{0%{left:-50%}to{left:100%}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -23863,16 +24006,32 @@ class MetadataInfoComponent {
|
|
|
23863
24006
|
}
|
|
23864
24007
|
get hasUsage() {
|
|
23865
24008
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23866
|
-
this.metadata.
|
|
23867
|
-
|
|
24009
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24010
|
+
this.legalConstraints.length > 0) ||
|
|
24011
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24012
|
+
this.otherConstraints.length > 0) ||
|
|
24013
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
24014
|
+
}
|
|
24015
|
+
get legalConstraints() {
|
|
24016
|
+
let array = [];
|
|
24017
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24018
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24019
|
+
}
|
|
24020
|
+
return array;
|
|
23868
24021
|
}
|
|
23869
|
-
get
|
|
24022
|
+
get otherConstraints() {
|
|
23870
24023
|
let array = [];
|
|
23871
|
-
if (this.metadata.
|
|
23872
|
-
array = array.concat(this.metadata.
|
|
24024
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24025
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23873
24026
|
}
|
|
23874
|
-
|
|
23875
|
-
|
|
24027
|
+
return array;
|
|
24028
|
+
}
|
|
24029
|
+
get licenses() {
|
|
24030
|
+
let array = [];
|
|
24031
|
+
if (this.metadata.licenses?.length) {
|
|
24032
|
+
array = array.concat(this.metadata.licenses
|
|
24033
|
+
.filter((c) => c.text)
|
|
24034
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23876
24035
|
}
|
|
23877
24036
|
return array;
|
|
23878
24037
|
}
|
|
@@ -23895,11 +24054,11 @@ class MetadataInfoComponent {
|
|
|
23895
24054
|
this.keyword.emit(keyword);
|
|
23896
24055
|
}
|
|
23897
24056
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23898
|
-
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: "<
|
|
24057
|
+
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.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: 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 }); }
|
|
23899
24058
|
}
|
|
23900
24059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23901
24060
|
type: Component,
|
|
23902
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
24061
|
+
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.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
23903
24062
|
}], propDecorators: { metadata: [{
|
|
23904
24063
|
type: Input
|
|
23905
24064
|
}], incomplete: [{
|
|
@@ -23968,11 +24127,11 @@ class ButtonComponent {
|
|
|
23968
24127
|
propagateToDocumentOnly(event);
|
|
23969
24128
|
}
|
|
23970
24129
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23971
|
-
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
|
|
24130
|
+
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 }); }
|
|
23972
24131
|
}
|
|
23973
24132
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
23974
24133
|
type: Component,
|
|
23975
|
-
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
|
|
24134
|
+
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"] }]
|
|
23976
24135
|
}], propDecorators: { type: [{
|
|
23977
24136
|
type: Input
|
|
23978
24137
|
}], disabled: [{
|
|
@@ -24047,40 +24206,15 @@ class DownloadsListComponent {
|
|
|
24047
24206
|
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
24048
24207
|
}
|
|
24049
24208
|
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 }); }
|
|
24050
|
-
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
|
|
24209
|
+
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 }); }
|
|
24051
24210
|
}
|
|
24052
24211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
24053
24212
|
type: Component,
|
|
24054
|
-
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
|
|
24213
|
+
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" }]
|
|
24055
24214
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
24056
24215
|
type: Input
|
|
24057
24216
|
}] } });
|
|
24058
24217
|
|
|
24059
|
-
class CopyTextButtonComponent {
|
|
24060
|
-
constructor() {
|
|
24061
|
-
this.displayText = true;
|
|
24062
|
-
this.rows = 1;
|
|
24063
|
-
}
|
|
24064
|
-
copyText(event) {
|
|
24065
|
-
navigator.clipboard.writeText(this.text);
|
|
24066
|
-
event.target.blur();
|
|
24067
|
-
}
|
|
24068
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24069
|
-
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 }); }
|
|
24070
|
-
}
|
|
24071
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24072
|
-
type: Component,
|
|
24073
|
-
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" }]
|
|
24074
|
-
}], propDecorators: { text: [{
|
|
24075
|
-
type: Input
|
|
24076
|
-
}], tooltipText: [{
|
|
24077
|
-
type: Input
|
|
24078
|
-
}], displayText: [{
|
|
24079
|
-
type: Input
|
|
24080
|
-
}], rows: [{
|
|
24081
|
-
type: Input
|
|
24082
|
-
}] } });
|
|
24083
|
-
|
|
24084
24218
|
class ApiCardComponent {
|
|
24085
24219
|
constructor() {
|
|
24086
24220
|
this.currentlyActive = false;
|
|
@@ -24277,11 +24411,11 @@ class CarouselComponent {
|
|
|
24277
24411
|
this.emblaApi.scrollTo(stepIndex);
|
|
24278
24412
|
}
|
|
24279
24413
|
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 }); }
|
|
24280
|
-
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
|
|
24414
|
+
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 }); }
|
|
24281
24415
|
}
|
|
24282
24416
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24283
24417
|
type: Component,
|
|
24284
|
-
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
|
|
24418
|
+
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"] }]
|
|
24285
24419
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24286
24420
|
type: Input
|
|
24287
24421
|
}], stepsContainerClass: [{
|
|
@@ -24325,6 +24459,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24325
24459
|
}]
|
|
24326
24460
|
}] });
|
|
24327
24461
|
|
|
24462
|
+
class InteractiveTableColumnComponent {
|
|
24463
|
+
constructor() {
|
|
24464
|
+
this.grow = false;
|
|
24465
|
+
this.sortable = false;
|
|
24466
|
+
this.activeSort = null;
|
|
24467
|
+
this.sortChange = new EventEmitter();
|
|
24468
|
+
}
|
|
24469
|
+
handleSortChange() {
|
|
24470
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24471
|
+
this.sortChange.emit(this.activeSort);
|
|
24472
|
+
}
|
|
24473
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24474
|
+
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 }); }
|
|
24475
|
+
}
|
|
24476
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24477
|
+
type: Component,
|
|
24478
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24479
|
+
}], propDecorators: { header: [{
|
|
24480
|
+
type: ContentChild,
|
|
24481
|
+
args: ['header']
|
|
24482
|
+
}], cell: [{
|
|
24483
|
+
type: ContentChild,
|
|
24484
|
+
args: ['cell']
|
|
24485
|
+
}], grow: [{
|
|
24486
|
+
type: Input
|
|
24487
|
+
}], sortable: [{
|
|
24488
|
+
type: Input
|
|
24489
|
+
}], activeSort: [{
|
|
24490
|
+
type: Input
|
|
24491
|
+
}], sortChange: [{
|
|
24492
|
+
type: Output
|
|
24493
|
+
}] } });
|
|
24494
|
+
|
|
24495
|
+
class InteractiveTableComponent {
|
|
24496
|
+
constructor() {
|
|
24497
|
+
this.items = [];
|
|
24498
|
+
this.itemClick = new EventEmitter();
|
|
24499
|
+
}
|
|
24500
|
+
get gridStyle() {
|
|
24501
|
+
return {
|
|
24502
|
+
'grid-template-columns': this.columns
|
|
24503
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24504
|
+
.join(' '),
|
|
24505
|
+
};
|
|
24506
|
+
}
|
|
24507
|
+
handleRowClick(item) {
|
|
24508
|
+
this.itemClick.emit(item);
|
|
24509
|
+
}
|
|
24510
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24511
|
+
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 }); }
|
|
24512
|
+
}
|
|
24513
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24514
|
+
type: Component,
|
|
24515
|
+
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"] }]
|
|
24516
|
+
}], propDecorators: { columns: [{
|
|
24517
|
+
type: ContentChildren,
|
|
24518
|
+
args: [InteractiveTableColumnComponent]
|
|
24519
|
+
}], items: [{
|
|
24520
|
+
type: Input
|
|
24521
|
+
}], itemClick: [{
|
|
24522
|
+
type: Output
|
|
24523
|
+
}] } });
|
|
24524
|
+
|
|
24328
24525
|
class LinkCardComponent {
|
|
24329
24526
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24330
24527
|
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 }); }
|
|
@@ -24338,11 +24535,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24338
24535
|
|
|
24339
24536
|
class RelatedRecordCardComponent {
|
|
24340
24537
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24341
|
-
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]
|
|
24538
|
+
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 }); }
|
|
24342
24539
|
}
|
|
24343
24540
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
24344
24541
|
type: Component,
|
|
24345
|
-
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]
|
|
24542
|
+
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" }]
|
|
24346
24543
|
}], propDecorators: { record: [{
|
|
24347
24544
|
type: Input
|
|
24348
24545
|
}] } });
|
|
@@ -24370,11 +24567,11 @@ class MetadataContactComponent {
|
|
|
24370
24567
|
this.organizationClick.emit(this.shownOrganization);
|
|
24371
24568
|
}
|
|
24372
24569
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24373
|
-
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
|
|
24570
|
+
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 }); }
|
|
24374
24571
|
}
|
|
24375
24572
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24376
24573
|
type: Component,
|
|
24377
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24574
|
+
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" }]
|
|
24378
24575
|
}], propDecorators: { metadata: [{
|
|
24379
24576
|
type: Input
|
|
24380
24577
|
}], organizationClick: [{
|
|
@@ -24640,7 +24837,10 @@ class DropdownMultiselectComponent {
|
|
|
24640
24837
|
return this.choices.filter((choice) => this.selected.indexOf(choice.value) > -1);
|
|
24641
24838
|
}
|
|
24642
24839
|
get filteredChoicesByText() {
|
|
24643
|
-
|
|
24840
|
+
if (!this.searchInputValue)
|
|
24841
|
+
return this.choices;
|
|
24842
|
+
const filter = createFuzzyFilter(this.searchInputValue);
|
|
24843
|
+
return this.choices.filter((choice) => filter(choice.label));
|
|
24644
24844
|
}
|
|
24645
24845
|
get focusedIndex() {
|
|
24646
24846
|
return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
@@ -24775,11 +24975,11 @@ class DropdownMultiselectComponent {
|
|
|
24775
24975
|
this.setFocus();
|
|
24776
24976
|
}
|
|
24777
24977
|
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 }); }
|
|
24778
|
-
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,
|
|
24978
|
+
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 }); }
|
|
24779
24979
|
}
|
|
24780
24980
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24781
24981
|
type: Component,
|
|
24782
|
-
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,
|
|
24982
|
+
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" }]
|
|
24783
24983
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24784
24984
|
type: Input
|
|
24785
24985
|
}], choices: [{
|
|
@@ -24933,11 +25133,11 @@ class TextAreaComponent {
|
|
|
24933
25133
|
this.rawChange.next(value);
|
|
24934
25134
|
}
|
|
24935
25135
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24936
|
-
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"] }); }
|
|
25136
|
+
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"] }); }
|
|
24937
25137
|
}
|
|
24938
25138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
24939
25139
|
type: Component,
|
|
24940
|
-
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"] }]
|
|
25140
|
+
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"] }]
|
|
24941
25141
|
}], propDecorators: { value: [{
|
|
24942
25142
|
type: Input
|
|
24943
25143
|
}], placeholder: [{
|
|
@@ -25038,11 +25238,11 @@ class AutocompleteComponent {
|
|
|
25038
25238
|
}
|
|
25039
25239
|
}
|
|
25040
25240
|
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 }); }
|
|
25041
|
-
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(
|
|
25241
|
+
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 }); }
|
|
25042
25242
|
}
|
|
25043
25243
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25044
25244
|
type: Component,
|
|
25045
|
-
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(
|
|
25245
|
+
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"] }]
|
|
25046
25246
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25047
25247
|
type: Input
|
|
25048
25248
|
}], action: [{
|
|
@@ -25091,11 +25291,11 @@ class StarToggleComponent {
|
|
|
25091
25291
|
event.preventDefault();
|
|
25092
25292
|
}
|
|
25093
25293
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25094
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25294
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25095
25295
|
}
|
|
25096
25296
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, decorators: [{
|
|
25097
25297
|
type: Component,
|
|
25098
|
-
args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
|
|
25298
|
+
args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
|
|
25099
25299
|
}], propDecorators: { toggled: [{
|
|
25100
25300
|
type: Input
|
|
25101
25301
|
}], disabled: [{
|
|
@@ -25207,11 +25407,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25207
25407
|
|
|
25208
25408
|
class NavigationButtonComponent {
|
|
25209
25409
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25210
|
-
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 backdrop-blur p-1 bg-primary-opacity-
|
|
25410
|
+
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 text-white 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: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25211
25411
|
}
|
|
25212
25412
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25213
25413
|
type: Component,
|
|
25214
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center backdrop-blur p-1 bg-primary-opacity-
|
|
25414
|
+
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 text-white 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" }]
|
|
25215
25415
|
}], propDecorators: { label: [{
|
|
25216
25416
|
type: Input
|
|
25217
25417
|
}], icon: [{
|
|
@@ -25418,11 +25618,11 @@ class CheckboxComponent {
|
|
|
25418
25618
|
this.changed.emit(this.checked);
|
|
25419
25619
|
}
|
|
25420
25620
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25421
|
-
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
|
|
25621
|
+
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 }); }
|
|
25422
25622
|
}
|
|
25423
25623
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25424
25624
|
type: Component,
|
|
25425
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25625
|
+
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"] }]
|
|
25426
25626
|
}], propDecorators: { type: [{
|
|
25427
25627
|
type: Input
|
|
25428
25628
|
}], checked: [{
|
|
@@ -25477,14 +25677,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25477
25677
|
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"] }]
|
|
25478
25678
|
}] });
|
|
25479
25679
|
|
|
25680
|
+
class EditableLabelDirective {
|
|
25681
|
+
constructor(el, renderer) {
|
|
25682
|
+
this.el = el;
|
|
25683
|
+
this.renderer = renderer;
|
|
25684
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25685
|
+
}
|
|
25686
|
+
ngAfterViewInit() {
|
|
25687
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25688
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25689
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25690
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25691
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25692
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25693
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25694
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25695
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25696
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25697
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25698
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25699
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25700
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25701
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25702
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25703
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25704
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25705
|
+
});
|
|
25706
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25707
|
+
}
|
|
25708
|
+
}
|
|
25709
|
+
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 }); }
|
|
25710
|
+
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 }); }
|
|
25711
|
+
}
|
|
25712
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25713
|
+
type: Directive,
|
|
25714
|
+
args: [{
|
|
25715
|
+
selector: '[gnUiEditableLabel]',
|
|
25716
|
+
standalone: true,
|
|
25717
|
+
}]
|
|
25718
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25719
|
+
type: Output
|
|
25720
|
+
}], gnUiEditableLabel: [{
|
|
25721
|
+
type: Input
|
|
25722
|
+
}] } });
|
|
25723
|
+
|
|
25480
25724
|
class UiInputsModule {
|
|
25481
25725
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25482
25726
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
25483
25727
|
AutocompleteComponent,
|
|
25484
|
-
ButtonComponent,
|
|
25485
25728
|
TextInputComponent,
|
|
25486
25729
|
DragAndDropFileInputComponent,
|
|
25487
|
-
TextAreaComponent,
|
|
25488
25730
|
ChipsInputComponent,
|
|
25489
25731
|
NavigationButtonComponent,
|
|
25490
25732
|
StarToggleComponent,
|
|
@@ -25516,7 +25758,10 @@ class UiInputsModule {
|
|
|
25516
25758
|
MatFormFieldModule,
|
|
25517
25759
|
MatInputModule,
|
|
25518
25760
|
MatDatepickerModule,
|
|
25519
|
-
MatNativeDateModule
|
|
25761
|
+
MatNativeDateModule,
|
|
25762
|
+
EditableLabelDirective,
|
|
25763
|
+
TextAreaComponent,
|
|
25764
|
+
ButtonComponent], exports: [DropdownSelectorComponent,
|
|
25520
25765
|
AutocompleteComponent,
|
|
25521
25766
|
ButtonComponent,
|
|
25522
25767
|
TextInputComponent,
|
|
@@ -25532,7 +25777,8 @@ class UiInputsModule {
|
|
|
25532
25777
|
CopyTextButtonComponent,
|
|
25533
25778
|
CheckboxComponent,
|
|
25534
25779
|
SearchInputComponent,
|
|
25535
|
-
DateRangePickerComponent
|
|
25780
|
+
DateRangePickerComponent,
|
|
25781
|
+
EditableLabelDirective] }); }
|
|
25536
25782
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25537
25783
|
TranslateModule.forChild(),
|
|
25538
25784
|
NgxDropzoneModule,
|
|
@@ -25557,10 +25803,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25557
25803
|
declarations: [
|
|
25558
25804
|
DropdownSelectorComponent,
|
|
25559
25805
|
AutocompleteComponent,
|
|
25560
|
-
ButtonComponent,
|
|
25561
25806
|
TextInputComponent,
|
|
25562
25807
|
DragAndDropFileInputComponent,
|
|
25563
|
-
TextAreaComponent,
|
|
25564
25808
|
ChipsInputComponent,
|
|
25565
25809
|
NavigationButtonComponent,
|
|
25566
25810
|
StarToggleComponent,
|
|
@@ -25598,6 +25842,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25598
25842
|
MatInputModule,
|
|
25599
25843
|
MatDatepickerModule,
|
|
25600
25844
|
MatNativeDateModule,
|
|
25845
|
+
EditableLabelDirective,
|
|
25846
|
+
TextAreaComponent,
|
|
25847
|
+
ButtonComponent,
|
|
25601
25848
|
],
|
|
25602
25849
|
exports: [
|
|
25603
25850
|
DropdownSelectorComponent,
|
|
@@ -25617,6 +25864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25617
25864
|
CheckboxComponent,
|
|
25618
25865
|
SearchInputComponent,
|
|
25619
25866
|
DateRangePickerComponent,
|
|
25867
|
+
EditableLabelDirective,
|
|
25620
25868
|
],
|
|
25621
25869
|
}]
|
|
25622
25870
|
}] });
|
|
@@ -25716,7 +25964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25716
25964
|
|
|
25717
25965
|
const DEFAULT_PARAMS = {
|
|
25718
25966
|
OFFSET: '',
|
|
25719
|
-
LIMIT: '',
|
|
25967
|
+
LIMIT: '-1',
|
|
25720
25968
|
FORMAT: 'json',
|
|
25721
25969
|
};
|
|
25722
25970
|
class RecordApiFormComponent {
|
|
@@ -25745,6 +25993,8 @@ class RecordApiFormComponent {
|
|
|
25745
25993
|
}
|
|
25746
25994
|
return outputUrl;
|
|
25747
25995
|
}));
|
|
25996
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
25997
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25748
25998
|
}
|
|
25749
25999
|
set apiLink(value) {
|
|
25750
26000
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25754,10 +26004,11 @@ class RecordApiFormComponent {
|
|
|
25754
26004
|
this.offset$.next(value);
|
|
25755
26005
|
}
|
|
25756
26006
|
setLimit(value) {
|
|
25757
|
-
|
|
26007
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26008
|
+
this.limit$.next(newLimit);
|
|
25758
26009
|
}
|
|
25759
26010
|
setFormat(value) {
|
|
25760
|
-
this.format$.next(value);
|
|
26011
|
+
this.format$.next(String(value));
|
|
25761
26012
|
}
|
|
25762
26013
|
resetUrl() {
|
|
25763
26014
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25765,15 +26016,34 @@ class RecordApiFormComponent {
|
|
|
25765
26016
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25766
26017
|
}
|
|
25767
26018
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25768
|
-
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 (
|
|
26019
|
+
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 }); }
|
|
25769
26020
|
}
|
|
25770
26021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25771
26022
|
type: Component,
|
|
25772
|
-
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 (
|
|
26023
|
+
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"] }]
|
|
25773
26024
|
}], propDecorators: { apiLink: [{
|
|
25774
26025
|
type: Input
|
|
25775
26026
|
}] } });
|
|
25776
26027
|
|
|
26028
|
+
class ImageOverlayPreviewComponent {
|
|
26029
|
+
constructor() {
|
|
26030
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
26031
|
+
}
|
|
26032
|
+
openLightbox(src) {
|
|
26033
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
26034
|
+
}
|
|
26035
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26036
|
+
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"] }] }); }
|
|
26037
|
+
}
|
|
26038
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
26039
|
+
type: Component,
|
|
26040
|
+
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" }]
|
|
26041
|
+
}], propDecorators: { imageUrl: [{
|
|
26042
|
+
type: Input
|
|
26043
|
+
}], isPlaceholderShown: [{
|
|
26044
|
+
type: Output
|
|
26045
|
+
}] } });
|
|
26046
|
+
|
|
25777
26047
|
class UiElementsModule {
|
|
25778
26048
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25779
26049
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -25795,7 +26065,8 @@ class UiElementsModule {
|
|
|
25795
26065
|
GnUiLinkifyDirective,
|
|
25796
26066
|
PaginationButtonsComponent,
|
|
25797
26067
|
MaxLinesComponent,
|
|
25798
|
-
RecordApiFormComponent
|
|
26068
|
+
RecordApiFormComponent,
|
|
26069
|
+
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25799
26070
|
MatIconModule,
|
|
25800
26071
|
MatTooltipModule,
|
|
25801
26072
|
UiWidgetsModule,
|
|
@@ -25803,7 +26074,8 @@ class UiElementsModule {
|
|
|
25803
26074
|
RouterModule,
|
|
25804
26075
|
UiInputsModule,
|
|
25805
26076
|
FormsModule,
|
|
25806
|
-
NgOptimizedImage
|
|
26077
|
+
NgOptimizedImage,
|
|
26078
|
+
MarkdownParserComponent], exports: [MetadataInfoComponent,
|
|
25807
26079
|
ContentGhostComponent,
|
|
25808
26080
|
DownloadItemComponent,
|
|
25809
26081
|
DownloadsListComponent,
|
|
@@ -25820,7 +26092,10 @@ class UiElementsModule {
|
|
|
25820
26092
|
AvatarComponent,
|
|
25821
26093
|
UserPreviewComponent,
|
|
25822
26094
|
PaginationButtonsComponent,
|
|
25823
|
-
|
|
26095
|
+
MaxLinesComponent,
|
|
26096
|
+
RecordApiFormComponent,
|
|
26097
|
+
MarkdownParserComponent,
|
|
26098
|
+
ImageOverlayPreviewComponent] }); }
|
|
25824
26099
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
25825
26100
|
MatIconModule,
|
|
25826
26101
|
MatTooltipModule,
|
|
@@ -25847,6 +26122,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25847
26122
|
UiInputsModule,
|
|
25848
26123
|
FormsModule,
|
|
25849
26124
|
NgOptimizedImage,
|
|
26125
|
+
MarkdownParserComponent,
|
|
25850
26126
|
],
|
|
25851
26127
|
declarations: [
|
|
25852
26128
|
MetadataInfoComponent,
|
|
@@ -25869,6 +26145,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25869
26145
|
PaginationButtonsComponent,
|
|
25870
26146
|
MaxLinesComponent,
|
|
25871
26147
|
RecordApiFormComponent,
|
|
26148
|
+
ImageOverlayPreviewComponent,
|
|
25872
26149
|
],
|
|
25873
26150
|
exports: [
|
|
25874
26151
|
MetadataInfoComponent,
|
|
@@ -25888,148 +26165,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25888
26165
|
AvatarComponent,
|
|
25889
26166
|
UserPreviewComponent,
|
|
25890
26167
|
PaginationButtonsComponent,
|
|
26168
|
+
MaxLinesComponent,
|
|
25891
26169
|
RecordApiFormComponent,
|
|
26170
|
+
MarkdownParserComponent,
|
|
26171
|
+
ImageOverlayPreviewComponent,
|
|
25892
26172
|
],
|
|
25893
26173
|
}]
|
|
25894
26174
|
}] });
|
|
25895
26175
|
|
|
25896
|
-
class RecordTableComponent {
|
|
25897
|
-
constructor() {
|
|
25898
|
-
this.selectedRecords = [];
|
|
25899
|
-
this.records = [];
|
|
25900
|
-
this.recordClick = new EventEmitter();
|
|
25901
|
-
this.recordsSelect = new EventEmitter();
|
|
25902
|
-
this.recordsDeselect = new EventEmitter();
|
|
25903
|
-
this.sortByChange = new EventEmitter();
|
|
25904
|
-
}
|
|
25905
|
-
dateToString(date) {
|
|
25906
|
-
return date?.toLocaleDateString(undefined, {
|
|
25907
|
-
year: 'numeric',
|
|
25908
|
-
month: 'long',
|
|
25909
|
-
day: 'numeric',
|
|
25910
|
-
timeZone: 'UTC',
|
|
25911
|
-
});
|
|
25912
|
-
}
|
|
25913
|
-
getStatus(isPublishedToAll) {
|
|
25914
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
25915
|
-
}
|
|
25916
|
-
formatUserInfo(userInfo) {
|
|
25917
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
25918
|
-
if (infos && infos.length === 4) {
|
|
25919
|
-
return `${infos[2]} ${infos[1]}`;
|
|
25920
|
-
}
|
|
25921
|
-
return undefined;
|
|
25922
|
-
}
|
|
25923
|
-
getRecordFormats(record) {
|
|
25924
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
25925
|
-
return [];
|
|
25926
|
-
}
|
|
25927
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
25928
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
25929
|
-
return formats;
|
|
25930
|
-
}
|
|
25931
|
-
getBadgeColor(format) {
|
|
25932
|
-
return getBadgeColor(format);
|
|
25933
|
-
}
|
|
25934
|
-
getOrderForColumn(col) {
|
|
25935
|
-
if (!this.sortBy) {
|
|
25936
|
-
return null;
|
|
25937
|
-
}
|
|
25938
|
-
let order = null;
|
|
25939
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
25940
|
-
? this.sortBy
|
|
25941
|
-
: [this.sortBy];
|
|
25942
|
-
sortedArray.forEach((sortedCol) => {
|
|
25943
|
-
if (sortedCol[1] === col) {
|
|
25944
|
-
order = sortedCol[0];
|
|
25945
|
-
}
|
|
25946
|
-
});
|
|
25947
|
-
return order;
|
|
25948
|
-
}
|
|
25949
|
-
setSortBy(col) {
|
|
25950
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
25951
|
-
let newOrder;
|
|
25952
|
-
if (sortOrder) {
|
|
25953
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
25954
|
-
}
|
|
25955
|
-
else {
|
|
25956
|
-
newOrder = 'asc';
|
|
25957
|
-
}
|
|
25958
|
-
this.sortByChange.emit([newOrder, col]);
|
|
25959
|
-
this.sortBy = [newOrder, col];
|
|
25960
|
-
}
|
|
25961
|
-
isSortedBy(col, order) {
|
|
25962
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
25963
|
-
return sortOrder === order;
|
|
25964
|
-
}
|
|
25965
|
-
isChecked(record) {
|
|
25966
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
25967
|
-
return true;
|
|
25968
|
-
}
|
|
25969
|
-
return false;
|
|
25970
|
-
}
|
|
25971
|
-
handleRecordSelectedChange(selected, record) {
|
|
25972
|
-
if (!selected) {
|
|
25973
|
-
this.recordsDeselect.emit([record]);
|
|
25974
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
25975
|
-
}
|
|
25976
|
-
else {
|
|
25977
|
-
this.recordsSelect.emit([record]);
|
|
25978
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
25979
|
-
}
|
|
25980
|
-
}
|
|
25981
|
-
selectAll() {
|
|
25982
|
-
if (this.isAllSelected()) {
|
|
25983
|
-
this.recordsDeselect.emit(this.records);
|
|
25984
|
-
this.selectedRecords = [];
|
|
25985
|
-
}
|
|
25986
|
-
else {
|
|
25987
|
-
this.recordsSelect.emit(this.records);
|
|
25988
|
-
this.selectedRecords = this.records.map((record) => {
|
|
25989
|
-
return record.uniqueIdentifier;
|
|
25990
|
-
});
|
|
25991
|
-
}
|
|
25992
|
-
}
|
|
25993
|
-
isAllSelected() {
|
|
25994
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
25995
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
25996
|
-
if (allRecords.length === this.records.length) {
|
|
25997
|
-
return true;
|
|
25998
|
-
}
|
|
25999
|
-
}
|
|
26000
|
-
return false;
|
|
26001
|
-
}
|
|
26002
|
-
isSomeSelected() {
|
|
26003
|
-
if (this.selectedRecords.length > 0 &&
|
|
26004
|
-
this.selectedRecords.length < this.records.length) {
|
|
26005
|
-
return true;
|
|
26006
|
-
}
|
|
26007
|
-
return false;
|
|
26008
|
-
}
|
|
26009
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26010
|
-
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"] }] }); }
|
|
26011
|
-
}
|
|
26012
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
26013
|
-
type: Component,
|
|
26014
|
-
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"] }]
|
|
26015
|
-
}], propDecorators: { selectedRecords: [{
|
|
26016
|
-
type: Input
|
|
26017
|
-
}], records: [{
|
|
26018
|
-
type: Input
|
|
26019
|
-
}], totalHits: [{
|
|
26020
|
-
type: Input
|
|
26021
|
-
}], sortBy: [{
|
|
26022
|
-
type: Input
|
|
26023
|
-
}], recordClick: [{
|
|
26024
|
-
type: Output
|
|
26025
|
-
}], recordsSelect: [{
|
|
26026
|
-
type: Output
|
|
26027
|
-
}], recordsDeselect: [{
|
|
26028
|
-
type: Output
|
|
26029
|
-
}], sortByChange: [{
|
|
26030
|
-
type: Output
|
|
26031
|
-
}] } });
|
|
26032
|
-
|
|
26033
26176
|
class UiSearchModule {
|
|
26034
26177
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26035
26178
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26042,8 +26185,7 @@ class UiSearchModule {
|
|
|
26042
26185
|
ResultsHitsNumberComponent,
|
|
26043
26186
|
ResultsListItemComponent,
|
|
26044
26187
|
RecordPreviewFeedComponent,
|
|
26045
|
-
RecordPreviewRowComponent,
|
|
26046
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26188
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26047
26189
|
FacetsModule$1,
|
|
26048
26190
|
FormsModule,
|
|
26049
26191
|
ReactiveFormsModule,
|
|
@@ -26054,7 +26196,8 @@ class UiSearchModule {
|
|
|
26054
26196
|
UiElementsModule,
|
|
26055
26197
|
MatIconModule,
|
|
26056
26198
|
MatCheckboxModule,
|
|
26057
|
-
RouterLink
|
|
26199
|
+
RouterLink,
|
|
26200
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26058
26201
|
RecordPreviewCardComponent,
|
|
26059
26202
|
RecordPreviewTextComponent,
|
|
26060
26203
|
RecordPreviewTitleComponent,
|
|
@@ -26064,8 +26207,7 @@ class UiSearchModule {
|
|
|
26064
26207
|
RecordPreviewComponent,
|
|
26065
26208
|
ResultsHitsNumberComponent,
|
|
26066
26209
|
RecordPreviewFeedComponent,
|
|
26067
|
-
RecordPreviewRowComponent
|
|
26068
|
-
RecordTableComponent] }); }
|
|
26210
|
+
RecordPreviewRowComponent] }); }
|
|
26069
26211
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26070
26212
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26071
26213
|
], imports: [CommonModule,
|
|
@@ -26080,7 +26222,8 @@ class UiSearchModule {
|
|
|
26080
26222
|
UiInputsModule,
|
|
26081
26223
|
UiElementsModule,
|
|
26082
26224
|
MatIconModule,
|
|
26083
|
-
MatCheckboxModule,
|
|
26225
|
+
MatCheckboxModule,
|
|
26226
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26084
26227
|
}
|
|
26085
26228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26086
26229
|
type: NgModule,
|
|
@@ -26097,7 +26240,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26097
26240
|
ResultsListItemComponent,
|
|
26098
26241
|
RecordPreviewFeedComponent,
|
|
26099
26242
|
RecordPreviewRowComponent,
|
|
26100
|
-
RecordTableComponent,
|
|
26101
26243
|
],
|
|
26102
26244
|
imports: [
|
|
26103
26245
|
CommonModule,
|
|
@@ -26114,6 +26256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26114
26256
|
MatIconModule,
|
|
26115
26257
|
MatCheckboxModule,
|
|
26116
26258
|
RouterLink,
|
|
26259
|
+
InteractiveTableComponent,
|
|
26117
26260
|
],
|
|
26118
26261
|
exports: [
|
|
26119
26262
|
RecordPreviewListComponent,
|
|
@@ -26127,7 +26270,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26127
26270
|
ResultsHitsNumberComponent,
|
|
26128
26271
|
RecordPreviewFeedComponent,
|
|
26129
26272
|
RecordPreviewRowComponent,
|
|
26130
|
-
RecordTableComponent,
|
|
26131
26273
|
],
|
|
26132
26274
|
providers: [
|
|
26133
26275
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26686,6 +26828,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26686
26828
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26687
26829
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26688
26830
|
|
|
26831
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26832
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26833
|
+
|
|
26689
26834
|
class SearchFacade {
|
|
26690
26835
|
constructor(store, filterGeometry) {
|
|
26691
26836
|
this.store = store;
|
|
@@ -26790,6 +26935,7 @@ class SearchFacade {
|
|
|
26790
26935
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26791
26936
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26792
26937
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
26938
|
+
return this;
|
|
26793
26939
|
}
|
|
26794
26940
|
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 }); }
|
|
26795
26941
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27174,8 +27320,11 @@ class FuzzySearchComponent {
|
|
|
27174
27320
|
this.searchService.updateFilters({ any });
|
|
27175
27321
|
}
|
|
27176
27322
|
}
|
|
27177
|
-
handleInputCleared() {
|
|
27178
|
-
this.
|
|
27323
|
+
async handleInputCleared() {
|
|
27324
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27325
|
+
if (currentSearchFilters.any) {
|
|
27326
|
+
this.searchService.updateFilters({ any: '' });
|
|
27327
|
+
}
|
|
27179
27328
|
}
|
|
27180
27329
|
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 }); }
|
|
27181
27330
|
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 }); }
|
|
@@ -27255,6 +27404,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27255
27404
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27256
27405
|
}] }]; } });
|
|
27257
27406
|
|
|
27407
|
+
// expects the replacement key ${uuid}
|
|
27408
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27409
|
+
|
|
27258
27410
|
class FavoriteStarComponent {
|
|
27259
27411
|
set record(value) {
|
|
27260
27412
|
this.record_ = value;
|
|
@@ -27275,6 +27427,7 @@ class FavoriteStarComponent {
|
|
|
27275
27427
|
this.changeDetector = changeDetector;
|
|
27276
27428
|
this.authService = authService;
|
|
27277
27429
|
this.translateService = translateService;
|
|
27430
|
+
this.displayCount = true;
|
|
27278
27431
|
this.isFavorite$ = this.favoritesService.myFavoritesUuid$.pipe(map$1((favorites) => favorites.indexOf(this.record.uniqueIdentifier) > -1));
|
|
27279
27432
|
this.isAnonymous$ = this.platformService.isAnonymous();
|
|
27280
27433
|
this.loading = false;
|
|
@@ -27337,12 +27490,14 @@ class FavoriteStarComponent {
|
|
|
27337
27490
|
});
|
|
27338
27491
|
}
|
|
27339
27492
|
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 }); }
|
|
27340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div>\n <span
|
|
27493
|
+
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 content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-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 class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\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 }); }
|
|
27341
27494
|
}
|
|
27342
27495
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
27343
27496
|
type: Component,
|
|
27344
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <span
|
|
27345
|
-
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: {
|
|
27497
|
+
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-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 class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
|
|
27498
|
+
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
|
|
27499
|
+
type: Input
|
|
27500
|
+
}], record: [{
|
|
27346
27501
|
type: Input
|
|
27347
27502
|
}], starToggleRef: [{
|
|
27348
27503
|
type: ViewChild,
|
|
@@ -27385,7 +27540,7 @@ class ResultsListContainerComponent {
|
|
|
27385
27540
|
return this.recordUrlTemplate.replace('${uuid}', metadata.uniqueIdentifier);
|
|
27386
27541
|
}
|
|
27387
27542
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }, { token: RECORD_URL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\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: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
|
|
27543
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\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: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["displayCount", "record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
|
|
27389
27544
|
}
|
|
27390
27545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
|
|
27391
27546
|
type: Component,
|
|
@@ -27513,9 +27668,11 @@ class SearchEffects {
|
|
|
27513
27668
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27514
27669
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27515
27670
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27516
|
-
return of([state, favorites,
|
|
27671
|
+
return of([state, favorites, undefined]);
|
|
27517
27672
|
}
|
|
27518
27673
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27674
|
+
if (!geom)
|
|
27675
|
+
return;
|
|
27519
27676
|
try {
|
|
27520
27677
|
const trace = valid$1(geom, true);
|
|
27521
27678
|
if (trace?.length > 0) {
|
|
@@ -27527,7 +27684,7 @@ class SearchEffects {
|
|
|
27527
27684
|
throw new Error();
|
|
27528
27685
|
}
|
|
27529
27686
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27530
|
-
return of([state, favorites,
|
|
27687
|
+
return of([state, favorites, undefined]);
|
|
27531
27688
|
}));
|
|
27532
27689
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27533
27690
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -27626,10 +27783,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27626
27783
|
class AbstractSearchField {
|
|
27627
27784
|
}
|
|
27628
27785
|
class SimpleSearchField {
|
|
27629
|
-
constructor(esFieldName, order = 'asc',
|
|
27786
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27630
27787
|
this.esFieldName = esFieldName;
|
|
27631
|
-
this.order = order;
|
|
27632
27788
|
this.injector = injector;
|
|
27789
|
+
this.order = order;
|
|
27790
|
+
this.orderType = orderType;
|
|
27633
27791
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27634
27792
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27635
27793
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27640,12 +27798,12 @@ class SimpleSearchField {
|
|
|
27640
27798
|
type: 'terms',
|
|
27641
27799
|
field: this.esFieldName,
|
|
27642
27800
|
limit: 1000,
|
|
27643
|
-
sort: [this.order,
|
|
27801
|
+
sort: [this.order, this.orderType],
|
|
27644
27802
|
},
|
|
27645
27803
|
};
|
|
27646
27804
|
}
|
|
27647
27805
|
async getBucketLabel(bucket) {
|
|
27648
|
-
return bucket.term;
|
|
27806
|
+
return bucket.term.toString();
|
|
27649
27807
|
}
|
|
27650
27808
|
getAvailableValues() {
|
|
27651
27809
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27673,9 +27831,13 @@ class SimpleSearchField {
|
|
|
27673
27831
|
return of(values);
|
|
27674
27832
|
}
|
|
27675
27833
|
}
|
|
27676
|
-
class
|
|
27677
|
-
constructor() {
|
|
27678
|
-
super(
|
|
27834
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
27835
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27836
|
+
super(esFieldName, injector, order, orderType);
|
|
27837
|
+
this.esFieldName = esFieldName;
|
|
27838
|
+
this.injector = injector;
|
|
27839
|
+
this.order = order;
|
|
27840
|
+
this.orderType = orderType;
|
|
27679
27841
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27680
27842
|
}
|
|
27681
27843
|
async getTranslation(key) {
|
|
@@ -27685,26 +27847,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27685
27847
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27686
27848
|
}
|
|
27687
27849
|
getAvailableValues() {
|
|
27850
|
+
if (this.orderType === 'count')
|
|
27851
|
+
return super.getAvailableValues();
|
|
27688
27852
|
// sort values by alphabetical order
|
|
27689
27853
|
return super
|
|
27690
27854
|
.getAvailableValues()
|
|
27691
27855
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27692
27856
|
}
|
|
27693
27857
|
}
|
|
27694
|
-
|
|
27695
|
-
|
|
27696
|
-
|
|
27697
|
-
|
|
27858
|
+
/**
|
|
27859
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
27860
|
+
* to the defined METADATA_LANGUAGE token
|
|
27861
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
27862
|
+
*/
|
|
27863
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
27864
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27865
|
+
super(esFieldName, injector, order, orderType);
|
|
27866
|
+
this.esFieldName = esFieldName;
|
|
27867
|
+
this.injector = injector;
|
|
27868
|
+
this.order = order;
|
|
27869
|
+
this.orderType = orderType;
|
|
27698
27870
|
this.langService = this.injector.get(LangService);
|
|
27699
|
-
this.
|
|
27700
|
-
|
|
27701
|
-
|
|
27702
|
-
|
|
27703
|
-
|
|
27704
|
-
}
|
|
27705
|
-
|
|
27706
|
-
|
|
27707
|
-
|
|
27871
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
27872
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
27873
|
+
// permalinks that might not work for different users
|
|
27874
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
27875
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
27876
|
+
}
|
|
27877
|
+
else {
|
|
27878
|
+
this.esFieldName += '.default';
|
|
27879
|
+
}
|
|
27708
27880
|
}
|
|
27709
27881
|
}
|
|
27710
27882
|
class FullTextSearchField {
|
|
@@ -27724,7 +27896,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27724
27896
|
marker('search.filters.isSpatial.no');
|
|
27725
27897
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27726
27898
|
constructor(injector) {
|
|
27727
|
-
super('isSpatial', 'asc'
|
|
27899
|
+
super('isSpatial', injector, 'asc');
|
|
27728
27900
|
this.translateService = this.injector.get(TranslateService);
|
|
27729
27901
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27730
27902
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27774,7 +27946,7 @@ marker('search.filters.license.unknown');
|
|
|
27774
27946
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27775
27947
|
class LicenseSearchField extends SimpleSearchField {
|
|
27776
27948
|
constructor(injector) {
|
|
27777
|
-
super('license', 'asc'
|
|
27949
|
+
super('license', injector, 'asc');
|
|
27778
27950
|
this.translateService = this.injector.get(TranslateService);
|
|
27779
27951
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27780
27952
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -27858,7 +28030,7 @@ class OrganizationSearchField {
|
|
|
27858
28030
|
}
|
|
27859
28031
|
class OwnerSearchField extends SimpleSearchField {
|
|
27860
28032
|
constructor(injector) {
|
|
27861
|
-
super('owner', 'asc'
|
|
28033
|
+
super('owner', injector, 'asc');
|
|
27862
28034
|
}
|
|
27863
28035
|
getAvailableValues() {
|
|
27864
28036
|
return of([]);
|
|
@@ -27867,6 +28039,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
27867
28039
|
|
|
27868
28040
|
marker('search.filters.format');
|
|
27869
28041
|
marker('search.filters.inspireKeyword');
|
|
28042
|
+
marker('search.filters.keyword');
|
|
27870
28043
|
marker('search.filters.isSpatial');
|
|
27871
28044
|
marker('search.filters.license');
|
|
27872
28045
|
marker('search.filters.publicationYear');
|
|
@@ -27884,13 +28057,14 @@ class FieldsService {
|
|
|
27884
28057
|
this.injector = injector;
|
|
27885
28058
|
this.fields = {
|
|
27886
28059
|
publisher: new OrganizationSearchField(this.injector),
|
|
27887
|
-
format: new SimpleSearchField('format', 'asc'
|
|
27888
|
-
resourceType: new
|
|
27889
|
-
representationType: new
|
|
27890
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
27891
|
-
topic: new
|
|
27892
|
-
inspireKeyword: new
|
|
27893
|
-
|
|
28060
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28061
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28062
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28063
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28064
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28065
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28066
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28067
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
27894
28068
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
27895
28069
|
q: new FullTextSearchField(),
|
|
27896
28070
|
license: new LicenseSearchField(this.injector),
|
|
@@ -27964,10 +28138,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27964
28138
|
type: Input
|
|
27965
28139
|
}] } });
|
|
27966
28140
|
|
|
27967
|
-
// this geometry will be used to filter & boost results accordingly
|
|
27968
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
27969
|
-
// expects the replacement key ${uuid}
|
|
27970
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27971
28141
|
class FeatureSearchModule {
|
|
27972
28142
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27973
28143
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28066,6 +28236,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28066
28236
|
}]
|
|
28067
28237
|
}] });
|
|
28068
28238
|
|
|
28239
|
+
class ResultsTableComponent {
|
|
28240
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28241
|
+
this.searchFacade = searchFacade;
|
|
28242
|
+
this.searchService = searchService;
|
|
28243
|
+
this.selectionService = selectionService;
|
|
28244
|
+
this.recordClick = new EventEmitter();
|
|
28245
|
+
this.records$ = this.searchFacade.results$;
|
|
28246
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28247
|
+
}
|
|
28248
|
+
dateToString(date) {
|
|
28249
|
+
return date?.toLocaleDateString(undefined, {
|
|
28250
|
+
year: 'numeric',
|
|
28251
|
+
month: 'long',
|
|
28252
|
+
day: 'numeric',
|
|
28253
|
+
timeZone: 'UTC',
|
|
28254
|
+
});
|
|
28255
|
+
}
|
|
28256
|
+
getStatus(isPublishedToAll) {
|
|
28257
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28258
|
+
}
|
|
28259
|
+
getRecordFormats(record) {
|
|
28260
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28261
|
+
return [];
|
|
28262
|
+
}
|
|
28263
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28264
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28265
|
+
return formats;
|
|
28266
|
+
}
|
|
28267
|
+
formatUserInfo(userInfo) {
|
|
28268
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28269
|
+
if (infos && infos.length === 4) {
|
|
28270
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28271
|
+
}
|
|
28272
|
+
return undefined;
|
|
28273
|
+
}
|
|
28274
|
+
getBadgeColor(format) {
|
|
28275
|
+
return getBadgeColor(format);
|
|
28276
|
+
}
|
|
28277
|
+
handleRecordClick(item) {
|
|
28278
|
+
this.recordClick.emit(item);
|
|
28279
|
+
}
|
|
28280
|
+
setSortBy(col, order) {
|
|
28281
|
+
this.searchService.setSortBy([order, col]);
|
|
28282
|
+
}
|
|
28283
|
+
isSortedBy(col) {
|
|
28284
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28285
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28286
|
+
? sortOrder
|
|
28287
|
+
: [sortOrder];
|
|
28288
|
+
for (const sort of sortArray) {
|
|
28289
|
+
if (sort[1] === col) {
|
|
28290
|
+
return sort[0];
|
|
28291
|
+
}
|
|
28292
|
+
}
|
|
28293
|
+
return null;
|
|
28294
|
+
}));
|
|
28295
|
+
}
|
|
28296
|
+
isChecked(record) {
|
|
28297
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28298
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28299
|
+
}));
|
|
28300
|
+
}
|
|
28301
|
+
handleRecordSelectedChange(selected, record) {
|
|
28302
|
+
if (!selected) {
|
|
28303
|
+
this.selectionService.deselectRecords([record]);
|
|
28304
|
+
}
|
|
28305
|
+
else {
|
|
28306
|
+
this.selectionService.selectRecords([record]);
|
|
28307
|
+
}
|
|
28308
|
+
}
|
|
28309
|
+
async toggleSelectAll() {
|
|
28310
|
+
const records = await firstValueFrom(this.records$);
|
|
28311
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28312
|
+
this.selectionService.deselectRecords(records);
|
|
28313
|
+
}
|
|
28314
|
+
else {
|
|
28315
|
+
this.selectionService.selectRecords(records);
|
|
28316
|
+
}
|
|
28317
|
+
}
|
|
28318
|
+
isAllSelected() {
|
|
28319
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28320
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28321
|
+
}));
|
|
28322
|
+
}
|
|
28323
|
+
isSomeSelected() {
|
|
28324
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28325
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28326
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28327
|
+
return !allSelected && someSelected;
|
|
28328
|
+
}));
|
|
28329
|
+
}
|
|
28330
|
+
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 }); }
|
|
28331
|
+
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"] }] }); }
|
|
28332
|
+
}
|
|
28333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28334
|
+
type: Component,
|
|
28335
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28336
|
+
CommonModule,
|
|
28337
|
+
UiInputsModule,
|
|
28338
|
+
InteractiveTableComponent,
|
|
28339
|
+
InteractiveTableColumnComponent,
|
|
28340
|
+
MatIconModule,
|
|
28341
|
+
TranslateModule,
|
|
28342
|
+
], 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" }]
|
|
28343
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28344
|
+
type: Output
|
|
28345
|
+
}] } });
|
|
28346
|
+
|
|
28069
28347
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28070
28348
|
get mapLinks() {
|
|
28071
28349
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28100,7 +28378,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
|
28100
28378
|
return getLinkLabel(link);
|
|
28101
28379
|
}
|
|
28102
28380
|
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 }); }
|
|
28103
|
-
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 }); }
|
|
28381
|
+
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 }); }
|
|
28104
28382
|
}
|
|
28105
28383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
|
|
28106
28384
|
type: Component,
|
|
@@ -28144,6 +28422,208 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28144
28422
|
], template: "<div class=\"h-full text-sm\">\n <gn-ui-fuzzy-search></gn-ui-fuzzy-search>\n <gn-ui-results-list-container\n layout=\"ADDLAYER\"\n ></gn-ui-results-list-container>\n</div>\n", styles: ["::ng-deep .mat-tab-body-wrapper{flex-grow:1}\n"] }]
|
|
28145
28423
|
}], ctorParameters: function () { return [{ type: SearchFacade }]; } });
|
|
28146
28424
|
|
|
28425
|
+
class AddLayerFromWmsComponent {
|
|
28426
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28427
|
+
this.mapFacade = mapFacade;
|
|
28428
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28429
|
+
this.wmsUrl = '';
|
|
28430
|
+
this.loading = false;
|
|
28431
|
+
this.layers = [];
|
|
28432
|
+
this.wmsEndpoint = null;
|
|
28433
|
+
this.urlChange = new Subject();
|
|
28434
|
+
this.errorMessage = null;
|
|
28435
|
+
}
|
|
28436
|
+
ngOnInit() {
|
|
28437
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28438
|
+
}
|
|
28439
|
+
async loadLayers() {
|
|
28440
|
+
this.errorMessage = null;
|
|
28441
|
+
try {
|
|
28442
|
+
this.loading = true;
|
|
28443
|
+
if (this.wmsUrl.trim() === '') {
|
|
28444
|
+
this.layers = [];
|
|
28445
|
+
return;
|
|
28446
|
+
}
|
|
28447
|
+
this.wmsEndpoint = await new WmsEndpoint(this.wmsUrl).isReady();
|
|
28448
|
+
this.layers = this.wmsEndpoint.getLayers();
|
|
28449
|
+
}
|
|
28450
|
+
catch (error) {
|
|
28451
|
+
const err = error;
|
|
28452
|
+
this.layers = [];
|
|
28453
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28454
|
+
}
|
|
28455
|
+
finally {
|
|
28456
|
+
this.loading = false;
|
|
28457
|
+
this.changeDetectorRef.markForCheck();
|
|
28458
|
+
}
|
|
28459
|
+
}
|
|
28460
|
+
addLayer(layer) {
|
|
28461
|
+
const layerToAdd = {
|
|
28462
|
+
name: layer.name,
|
|
28463
|
+
url: this.wmsUrl.toString(),
|
|
28464
|
+
type: MapContextLayerTypeEnum.WMS,
|
|
28465
|
+
};
|
|
28466
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28467
|
+
}
|
|
28468
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28469
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms", ngImport: i0, 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", 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$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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" }] }); }
|
|
28470
|
+
}
|
|
28471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
|
|
28472
|
+
type: Component,
|
|
28473
|
+
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" }]
|
|
28474
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28475
|
+
|
|
28476
|
+
const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
|
|
28477
|
+
class AddLayerFromFileComponent {
|
|
28478
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28479
|
+
this.mapFacade = mapFacade;
|
|
28480
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28481
|
+
this.errorMessage = null;
|
|
28482
|
+
this.successMessage = null;
|
|
28483
|
+
this.loading = false;
|
|
28484
|
+
this.acceptedMimeType = ['.geojson'];
|
|
28485
|
+
this.maxFileSize = 5000000;
|
|
28486
|
+
}
|
|
28487
|
+
async handleFileChange(file) {
|
|
28488
|
+
if (!file) {
|
|
28489
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28490
|
+
return;
|
|
28491
|
+
}
|
|
28492
|
+
if (file.size > this.maxFileSize) {
|
|
28493
|
+
this.displayMessage('File size exceeds the limit of 5MB', 'error');
|
|
28494
|
+
return;
|
|
28495
|
+
}
|
|
28496
|
+
await this.addLayer(file);
|
|
28497
|
+
}
|
|
28498
|
+
async addLayer(file) {
|
|
28499
|
+
this.errorMessage = null;
|
|
28500
|
+
this.loading = true;
|
|
28501
|
+
try {
|
|
28502
|
+
if (!this.isFileFormatValid(file)) {
|
|
28503
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28504
|
+
return;
|
|
28505
|
+
}
|
|
28506
|
+
const fileExtension = this.getFileExtension(file);
|
|
28507
|
+
switch (fileExtension) {
|
|
28508
|
+
case 'geojson':
|
|
28509
|
+
await this.addGeoJsonLayer(file);
|
|
28510
|
+
break;
|
|
28511
|
+
default:
|
|
28512
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28513
|
+
break;
|
|
28514
|
+
}
|
|
28515
|
+
}
|
|
28516
|
+
catch (error) {
|
|
28517
|
+
const err = error;
|
|
28518
|
+
this.displayMessage('Error loading file: ' + err.message, 'error');
|
|
28519
|
+
}
|
|
28520
|
+
finally {
|
|
28521
|
+
this.loading = false;
|
|
28522
|
+
}
|
|
28523
|
+
}
|
|
28524
|
+
addGeoJsonLayer(file) {
|
|
28525
|
+
return new Promise((resolve, reject) => {
|
|
28526
|
+
try {
|
|
28527
|
+
const reader = new FileReader();
|
|
28528
|
+
reader.onload = () => {
|
|
28529
|
+
const result = reader.result;
|
|
28530
|
+
const title = file.name.split('.').slice(0, -1).join('.');
|
|
28531
|
+
const layerToAdd = {
|
|
28532
|
+
type: 'geojson',
|
|
28533
|
+
data: result,
|
|
28534
|
+
};
|
|
28535
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: title });
|
|
28536
|
+
this.displayMessage('File successfully added to map', 'success');
|
|
28537
|
+
resolve();
|
|
28538
|
+
};
|
|
28539
|
+
reader.onerror = reject;
|
|
28540
|
+
reader.readAsText(file);
|
|
28541
|
+
}
|
|
28542
|
+
catch (error) {
|
|
28543
|
+
reject(error);
|
|
28544
|
+
}
|
|
28545
|
+
});
|
|
28546
|
+
}
|
|
28547
|
+
isFileFormatValid(file) {
|
|
28548
|
+
const fileExtension = this.getFileExtension(file);
|
|
28549
|
+
return this.acceptedMimeType.includes(`.${fileExtension}`);
|
|
28550
|
+
}
|
|
28551
|
+
getFileExtension(file) {
|
|
28552
|
+
return file.name.split('.').pop();
|
|
28553
|
+
}
|
|
28554
|
+
displayMessage(message, type) {
|
|
28555
|
+
if (type === 'success') {
|
|
28556
|
+
this.successMessage = message;
|
|
28557
|
+
}
|
|
28558
|
+
else if (type === 'error') {
|
|
28559
|
+
this.errorMessage = message;
|
|
28560
|
+
}
|
|
28561
|
+
setTimeout(() => {
|
|
28562
|
+
this.successMessage = null;
|
|
28563
|
+
this.errorMessage = null;
|
|
28564
|
+
this.changeDetectorRef.detectChanges();
|
|
28565
|
+
}, 5000);
|
|
28566
|
+
}
|
|
28567
|
+
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 }); }
|
|
28568
|
+
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" }] }); }
|
|
28569
|
+
}
|
|
28570
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
|
|
28571
|
+
type: Component,
|
|
28572
|
+
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" }]
|
|
28573
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28574
|
+
|
|
28575
|
+
class AddLayerFromWfsComponent {
|
|
28576
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28577
|
+
this.mapFacade = mapFacade;
|
|
28578
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28579
|
+
this.wfsUrl = '';
|
|
28580
|
+
this.loading = false;
|
|
28581
|
+
this.layers = [];
|
|
28582
|
+
this.wfsEndpoint = null;
|
|
28583
|
+
this.urlChange = new Subject();
|
|
28584
|
+
this.errorMessage = null;
|
|
28585
|
+
}
|
|
28586
|
+
ngOnInit() {
|
|
28587
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28588
|
+
}
|
|
28589
|
+
async loadLayers() {
|
|
28590
|
+
this.errorMessage = null;
|
|
28591
|
+
try {
|
|
28592
|
+
this.loading = true;
|
|
28593
|
+
if (this.wfsUrl.trim() === '') {
|
|
28594
|
+
this.layers = [];
|
|
28595
|
+
return;
|
|
28596
|
+
}
|
|
28597
|
+
this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
|
|
28598
|
+
this.layers = this.wfsEndpoint.getFeatureTypes();
|
|
28599
|
+
console.log(this.layers);
|
|
28600
|
+
}
|
|
28601
|
+
catch (error) {
|
|
28602
|
+
const err = error;
|
|
28603
|
+
this.layers = [];
|
|
28604
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28605
|
+
}
|
|
28606
|
+
finally {
|
|
28607
|
+
this.loading = false;
|
|
28608
|
+
this.changeDetectorRef.markForCheck();
|
|
28609
|
+
}
|
|
28610
|
+
}
|
|
28611
|
+
addLayer(layer) {
|
|
28612
|
+
const layerToAdd = {
|
|
28613
|
+
name: layer.name,
|
|
28614
|
+
url: this.wfsUrl.toString(),
|
|
28615
|
+
type: MapContextLayerTypeEnum.WFS,
|
|
28616
|
+
};
|
|
28617
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28618
|
+
}
|
|
28619
|
+
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 }); }
|
|
28620
|
+
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" }] }); }
|
|
28621
|
+
}
|
|
28622
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
28623
|
+
type: Component,
|
|
28624
|
+
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" }]
|
|
28625
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28626
|
+
|
|
28147
28627
|
class LayersPanelComponent {
|
|
28148
28628
|
constructor(mapFacade) {
|
|
28149
28629
|
this.mapFacade = mapFacade;
|
|
@@ -28153,11 +28633,11 @@ class LayersPanelComponent {
|
|
|
28153
28633
|
this.mapFacade.removeLayer(index);
|
|
28154
28634
|
}
|
|
28155
28635
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28156
|
-
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
|
|
28636
|
+
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 }); }
|
|
28157
28637
|
}
|
|
28158
28638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
28159
28639
|
type: Component,
|
|
28160
|
-
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
|
|
28640
|
+
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" }]
|
|
28161
28641
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28162
28642
|
|
|
28163
28643
|
class MapEffects {
|
|
@@ -28190,6 +28670,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28190
28670
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28191
28671
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28192
28672
|
|
|
28673
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28674
|
+
class GeocodingService {
|
|
28675
|
+
constructor(provider) {
|
|
28676
|
+
this.provider = provider;
|
|
28677
|
+
}
|
|
28678
|
+
query(text) {
|
|
28679
|
+
let queryObservable;
|
|
28680
|
+
switch (this.provider[0]) {
|
|
28681
|
+
case 'geoadmin':
|
|
28682
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28683
|
+
break;
|
|
28684
|
+
case 'geonames':
|
|
28685
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28686
|
+
break;
|
|
28687
|
+
case 'data-gouv-fr':
|
|
28688
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28689
|
+
break;
|
|
28690
|
+
default:
|
|
28691
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28692
|
+
}
|
|
28693
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28694
|
+
}
|
|
28695
|
+
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 }); }
|
|
28696
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28697
|
+
}
|
|
28698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28699
|
+
type: Injectable,
|
|
28700
|
+
args: [{
|
|
28701
|
+
providedIn: 'root',
|
|
28702
|
+
}]
|
|
28703
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28704
|
+
type: Inject,
|
|
28705
|
+
args: [GEOCODING_PROVIDER]
|
|
28706
|
+
}] }]; } });
|
|
28707
|
+
|
|
28708
|
+
class GeocodingComponent {
|
|
28709
|
+
constructor(mapManager, geocodingService) {
|
|
28710
|
+
this.mapManager = mapManager;
|
|
28711
|
+
this.geocodingService = geocodingService;
|
|
28712
|
+
this.searchText = '';
|
|
28713
|
+
this.results = [];
|
|
28714
|
+
this.searchTextChanged = new Subject();
|
|
28715
|
+
this.destroy$ = new Subject();
|
|
28716
|
+
this.errorMessage = null;
|
|
28717
|
+
this.searchTextChanged
|
|
28718
|
+
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28719
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28720
|
+
this.errorMessage =
|
|
28721
|
+
'An error occurred while searching. Please try again.';
|
|
28722
|
+
console.error(error);
|
|
28723
|
+
return [];
|
|
28724
|
+
}));
|
|
28725
|
+
}), takeUntil(this.destroy$))
|
|
28726
|
+
.subscribe((results) => {
|
|
28727
|
+
this.results = results;
|
|
28728
|
+
});
|
|
28729
|
+
}
|
|
28730
|
+
ngOnDestroy() {
|
|
28731
|
+
this.destroy$.next();
|
|
28732
|
+
this.destroy$.complete();
|
|
28733
|
+
}
|
|
28734
|
+
onSearchChange(searchText) {
|
|
28735
|
+
if (!searchText) {
|
|
28736
|
+
this.clearSearch();
|
|
28737
|
+
return;
|
|
28738
|
+
}
|
|
28739
|
+
else {
|
|
28740
|
+
this.searchTextChanged.next(searchText);
|
|
28741
|
+
}
|
|
28742
|
+
}
|
|
28743
|
+
clearSearch() {
|
|
28744
|
+
this.searchText = '';
|
|
28745
|
+
this.results = [];
|
|
28746
|
+
this.errorMessage = null;
|
|
28747
|
+
}
|
|
28748
|
+
zoomToLocation(result) {
|
|
28749
|
+
const map = this.mapManager.map;
|
|
28750
|
+
const view = map.getView();
|
|
28751
|
+
const geometry = result.geom;
|
|
28752
|
+
if (geometry.type === 'Point') {
|
|
28753
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28754
|
+
}
|
|
28755
|
+
else if (geometry.type === 'Polygon') {
|
|
28756
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28757
|
+
}
|
|
28758
|
+
else {
|
|
28759
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28760
|
+
}
|
|
28761
|
+
}
|
|
28762
|
+
zoomToPoint(pointCoords, view) {
|
|
28763
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28764
|
+
view.setCenter(transformedCoords);
|
|
28765
|
+
view.setZoom(12);
|
|
28766
|
+
}
|
|
28767
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28768
|
+
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28769
|
+
const polygon = new Polygon([transformedCoords]);
|
|
28770
|
+
view.fit(polygon, {
|
|
28771
|
+
duration: 100,
|
|
28772
|
+
maxZoom: 12,
|
|
28773
|
+
});
|
|
28774
|
+
}
|
|
28775
|
+
onEnterPress() {
|
|
28776
|
+
if (this.results && this.results.length > 0) {
|
|
28777
|
+
this.zoomToLocation(this.results[0]);
|
|
28778
|
+
}
|
|
28779
|
+
}
|
|
28780
|
+
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 }); }
|
|
28781
|
+
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" }] }); }
|
|
28782
|
+
}
|
|
28783
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28784
|
+
type: Component,
|
|
28785
|
+
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" }]
|
|
28786
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28787
|
+
|
|
28193
28788
|
class FeatureMapModule {
|
|
28194
28789
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28195
28790
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
|
|
@@ -28197,7 +28792,11 @@ class FeatureMapModule {
|
|
|
28197
28792
|
LayersPanelComponent,
|
|
28198
28793
|
AddLayerFromCatalogComponent,
|
|
28199
28794
|
MapContainerComponent,
|
|
28200
|
-
AddLayerRecordPreviewComponent
|
|
28795
|
+
AddLayerRecordPreviewComponent,
|
|
28796
|
+
AddLayerFromWmsComponent,
|
|
28797
|
+
AddLayerFromFileComponent,
|
|
28798
|
+
AddLayerFromWfsComponent,
|
|
28799
|
+
GeocodingComponent], imports: [CommonModule,
|
|
28201
28800
|
UiMapModule,
|
|
28202
28801
|
UiLayoutModule,
|
|
28203
28802
|
MatIconModule,
|
|
@@ -28208,13 +28807,18 @@ class FeatureMapModule {
|
|
|
28208
28807
|
MapInstanceDirective,
|
|
28209
28808
|
LayersPanelComponent,
|
|
28210
28809
|
AddLayerFromCatalogComponent,
|
|
28211
|
-
MapContainerComponent
|
|
28810
|
+
MapContainerComponent,
|
|
28811
|
+
GeocodingComponent] }); }
|
|
28212
28812
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
|
|
28213
28813
|
{
|
|
28214
28814
|
provide: FEATURE_MAP_OPTIONS,
|
|
28215
28815
|
useValue: defaultMapOptions,
|
|
28216
28816
|
},
|
|
28217
28817
|
MapFacade,
|
|
28818
|
+
{
|
|
28819
|
+
provide: GEOCODING_PROVIDER,
|
|
28820
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28821
|
+
},
|
|
28218
28822
|
], imports: [CommonModule,
|
|
28219
28823
|
UiMapModule,
|
|
28220
28824
|
UiLayoutModule,
|
|
@@ -28237,6 +28841,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28237
28841
|
AddLayerFromCatalogComponent,
|
|
28238
28842
|
MapContainerComponent,
|
|
28239
28843
|
AddLayerRecordPreviewComponent,
|
|
28844
|
+
AddLayerFromWmsComponent,
|
|
28845
|
+
AddLayerFromFileComponent,
|
|
28846
|
+
AddLayerFromWfsComponent,
|
|
28847
|
+
GeocodingComponent,
|
|
28240
28848
|
],
|
|
28241
28849
|
exports: [
|
|
28242
28850
|
MapContextComponent,
|
|
@@ -28244,6 +28852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28244
28852
|
LayersPanelComponent,
|
|
28245
28853
|
AddLayerFromCatalogComponent,
|
|
28246
28854
|
MapContainerComponent,
|
|
28855
|
+
GeocodingComponent,
|
|
28247
28856
|
],
|
|
28248
28857
|
imports: [
|
|
28249
28858
|
CommonModule,
|
|
@@ -28264,6 +28873,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28264
28873
|
useValue: defaultMapOptions,
|
|
28265
28874
|
},
|
|
28266
28875
|
MapFacade,
|
|
28876
|
+
{
|
|
28877
|
+
provide: GEOCODING_PROVIDER,
|
|
28878
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28879
|
+
},
|
|
28267
28880
|
],
|
|
28268
28881
|
}]
|
|
28269
28882
|
}] });
|
|
@@ -28358,7 +28971,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28358
28971
|
...state,
|
|
28359
28972
|
chartConfig,
|
|
28360
28973
|
})), on(close, (state) => {
|
|
28361
|
-
// eslint-disable-next-line
|
|
28974
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28362
28975
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28363
28976
|
return stateWithoutMd;
|
|
28364
28977
|
}));
|
|
@@ -29625,15 +30238,16 @@ class DataService {
|
|
|
29625
30238
|
// Pour DL toutes les données
|
|
29626
30239
|
return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
|
|
29627
30240
|
...wfsLink,
|
|
30241
|
+
type: 'download',
|
|
29628
30242
|
url: new URL(urls[format]),
|
|
29629
|
-
mimeType: getMimeTypeForFormat(
|
|
30243
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29630
30244
|
}))));
|
|
29631
30245
|
}
|
|
29632
30246
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
29633
30247
|
return ['json', 'geojson'].map((format) => ({
|
|
29634
30248
|
...esriRestLink,
|
|
29635
30249
|
url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
|
|
29636
|
-
mimeType: getMimeTypeForFormat(
|
|
30250
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29637
30251
|
}));
|
|
29638
30252
|
}
|
|
29639
30253
|
readAsGeoJson(link) {
|
|
@@ -30027,12 +30641,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30027
30641
|
}] } });
|
|
30028
30642
|
|
|
30029
30643
|
class MapViewComponent {
|
|
30030
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30644
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30031
30645
|
this.mdViewFacade = mdViewFacade;
|
|
30032
30646
|
this.mapManager = mapManager;
|
|
30033
30647
|
this.mapUtils = mapUtils;
|
|
30034
30648
|
this.dataService = dataService;
|
|
30035
|
-
this.proxy = proxy;
|
|
30036
30649
|
this.featureInfo = featureInfo;
|
|
30037
30650
|
this.changeRef = changeRef;
|
|
30038
30651
|
this.styleService = styleService;
|
|
@@ -30067,7 +30680,7 @@ class MapViewComponent {
|
|
|
30067
30680
|
return of([]);
|
|
30068
30681
|
}), finalize(() => (this.loading = false)));
|
|
30069
30682
|
}));
|
|
30070
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30683
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30071
30684
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30072
30685
|
return of(undefined);
|
|
30073
30686
|
}), map$1((extent) => ({
|
|
@@ -30075,7 +30688,18 @@ class MapViewComponent {
|
|
|
30075
30688
|
view: {
|
|
30076
30689
|
extent,
|
|
30077
30690
|
},
|
|
30078
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30691
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30692
|
+
if (context.view.extent)
|
|
30693
|
+
return context;
|
|
30694
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30695
|
+
return {
|
|
30696
|
+
...context,
|
|
30697
|
+
view: {
|
|
30698
|
+
...context.view,
|
|
30699
|
+
extent,
|
|
30700
|
+
},
|
|
30701
|
+
};
|
|
30702
|
+
}));
|
|
30079
30703
|
}
|
|
30080
30704
|
ngOnDestroy() {
|
|
30081
30705
|
this.subscription.unsubscribe();
|
|
@@ -30128,13 +30752,13 @@ class MapViewComponent {
|
|
|
30128
30752
|
selectLinkToDisplay(link) {
|
|
30129
30753
|
this.selectedLinkIndex$.next(link);
|
|
30130
30754
|
}
|
|
30131
|
-
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:
|
|
30755
|
+
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 }); }
|
|
30132
30756
|
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 }); }
|
|
30133
30757
|
}
|
|
30134
30758
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30135
30759
|
type: Component,
|
|
30136
30760
|
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" }]
|
|
30137
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30761
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30138
30762
|
|
|
30139
30763
|
class DataViewComponent {
|
|
30140
30764
|
constructor(mdViewFacade) {
|
|
@@ -30217,7 +30841,7 @@ class OrganisationPreviewComponent {
|
|
|
30217
30841
|
this.clickedOrganisation.emit(this.organisation);
|
|
30218
30842
|
}
|
|
30219
30843
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30220
|
-
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 }); }
|
|
30844
|
+
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 }); }
|
|
30221
30845
|
}
|
|
30222
30846
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
|
|
30223
30847
|
type: Component,
|
|
@@ -30286,7 +30910,7 @@ class LanguageSwitcherComponent {
|
|
|
30286
30910
|
ngOnInit() {
|
|
30287
30911
|
const languages = this.languagePlaceholder || DEFAULT_LANGUAGES;
|
|
30288
30912
|
this.languageList = languages.map((language) => ({
|
|
30289
|
-
label:
|
|
30913
|
+
label: `${language}`.toUpperCase(),
|
|
30290
30914
|
value: language,
|
|
30291
30915
|
}));
|
|
30292
30916
|
}
|
|
@@ -30301,11 +30925,11 @@ class LanguageSwitcherComponent {
|
|
|
30301
30925
|
this.translate.use(value);
|
|
30302
30926
|
}
|
|
30303
30927
|
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 }); }
|
|
30304
|
-
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>\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"] }] }); }
|
|
30928
|
+
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 text-white !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"] }] }); }
|
|
30305
30929
|
}
|
|
30306
30930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30307
30931
|
type: Component,
|
|
30308
|
-
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>\n</gn-ui-dropdown-selector>\n" }]
|
|
30932
|
+
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 text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30309
30933
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30310
30934
|
type: Optional
|
|
30311
30935
|
}, {
|
|
@@ -30447,20 +31071,8 @@ class OrganisationsComponent {
|
|
|
30447
31071
|
filterOrganisations(organisations, filterBy) {
|
|
30448
31072
|
if (!filterBy)
|
|
30449
31073
|
return organisations;
|
|
30450
|
-
const
|
|
30451
|
-
|
|
30452
|
-
.replace(/\s(?=.)/g, '.*') //replace whitespaces by "AND" separator
|
|
30453
|
-
.replace(/\s/g, ''), //remove potential whitespaces left
|
|
30454
|
-
'i');
|
|
30455
|
-
return [...organisations].filter((org) => {
|
|
30456
|
-
return this.normalizeString(org.name).match(filterRegex);
|
|
30457
|
-
});
|
|
30458
|
-
}
|
|
30459
|
-
normalizeString(str) {
|
|
30460
|
-
return str
|
|
30461
|
-
.normalize('NFD')
|
|
30462
|
-
.replace(/[\u0300-\u036f]/g, '')
|
|
30463
|
-
.toLowerCase();
|
|
31074
|
+
const filter = createFuzzyFilter(filterBy);
|
|
31075
|
+
return organisations.filter((org) => filter(org.name));
|
|
30464
31076
|
}
|
|
30465
31077
|
sortOrganisations(organisations, sortBy) {
|
|
30466
31078
|
let order;
|
|
@@ -30598,13 +31210,6 @@ class MyOrgService {
|
|
|
30598
31210
|
constructor(platformService, orgService) {
|
|
30599
31211
|
this.platformService = platformService;
|
|
30600
31212
|
this.orgService = orgService;
|
|
30601
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
30602
|
-
orgName: '',
|
|
30603
|
-
logoUrl: '',
|
|
30604
|
-
recordCount: 0,
|
|
30605
|
-
userCount: 0,
|
|
30606
|
-
userList: [],
|
|
30607
|
-
});
|
|
30608
31213
|
this.myOrgData$ = combineLatest([
|
|
30609
31214
|
this.platformService.getMe(),
|
|
30610
31215
|
this.platformService.getUsers(),
|
|
@@ -30623,7 +31228,7 @@ class MyOrgService {
|
|
|
30623
31228
|
userList,
|
|
30624
31229
|
userCount,
|
|
30625
31230
|
};
|
|
30626
|
-
}));
|
|
31231
|
+
}), shareReplay(1));
|
|
30627
31232
|
}
|
|
30628
31233
|
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 }); }
|
|
30629
31234
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31316,11 +31921,11 @@ class RecordFormComponent {
|
|
|
31316
31921
|
return field.config.model;
|
|
31317
31922
|
}
|
|
31318
31923
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31319
|
-
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 }); }
|
|
31924
|
+
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 }); }
|
|
31320
31925
|
}
|
|
31321
31926
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31322
31927
|
type: Component,
|
|
31323
|
-
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" }]
|
|
31928
|
+
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" }]
|
|
31324
31929
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31325
31930
|
|
|
31326
31931
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -31688,5 +32293,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31688
32293
|
* Generated bundle index. Do not edit.
|
|
31689
32294
|
*/
|
|
31690
32295
|
|
|
31691
|
-
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,
|
|
32296
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
|
|
31692
32297
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|