geonetwork-ui 2.2.0-dev.0f95f702 → 2.2.0-dev.1533e02e
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/index.mjs +2 -1
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- 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/feature/auth/src/lib/feature-auth.module.mjs +2 -2
- package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +2 -2
- 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 +3 -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 +9 -6
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +3 -7
- 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 +8 -6
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +2 -2
- 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 +10 -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 +15 -3
- 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 +24 -5
- 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/ui-inputs.module.mjs +8 -3
- 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 +105 -89
- package/esm2022/translations/en.json +41 -25
- package/esm2022/translations/es.json +20 -4
- package/esm2022/translations/fr.json +25 -9
- package/esm2022/translations/it.json +32 -16
- package/esm2022/translations/nl.json +20 -4
- package/esm2022/translations/pt.json +20 -4
- package/fesm2022/geonetwork-ui.mjs +1317 -758
- 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/index.d.ts +1 -0
- package/libs/api/repository/src/index.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/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/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 +1 -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 +6 -5
- 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 +1 -1
- 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 +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.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-contact/metadata-contact.component.d.ts +1 -0
- package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts.map +1 -1
- 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 +2 -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/ui-inputs.module.d.ts +2 -1
- 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 +11 -6
- 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/index.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- 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/user/index.ts +1 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +6 -2
- package/src/libs/feature/auth/src/lib/feature-auth.module.ts +1 -1
- package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +1 -1
- 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 +6 -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 +3 -5
- package/src/libs/feature/search/src/lib/feature-search.module.ts +2 -11
- 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 +6 -5
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +1 -1
- 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-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 +16 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +93 -27
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +7 -0
- 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 +26 -3
- 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/ui-inputs.module.ts +3 -0
- 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 +105 -89
- package/translations/en.json +41 -25
- package/translations/es.json +20 -4
- package/translations/fr.json +25 -9
- package/translations/it.json +32 -16
- package/translations/nl.json +20 -4
- package/translations/pt.json +20 -4
- package/translations/sk.json +20 -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
11
|
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take, withLatestFrom, 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,23 +16834,23 @@ 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",
|
|
@@ -16960,13 +16868,13 @@ var de = {
|
|
|
16960
16868
|
"search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
16961
16869
|
"search.filters.maximize": "Erweitern",
|
|
16962
16870
|
"search.filters.minimize": "Minimieren",
|
|
16963
|
-
"search.filters.myRecords": "",
|
|
16964
|
-
"search.filters.myRecordsHelp": "",
|
|
16965
|
-
"search.filters.otherRecords": "",
|
|
16871
|
+
"search.filters.myRecords": "Nur meine Datensätze anzeigen",
|
|
16872
|
+
"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.",
|
|
16873
|
+
"search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
|
|
16966
16874
|
"search.filters.publicationYear": "Veröffentlichungsjahr",
|
|
16967
16875
|
"search.filters.publisher": "Organisationen",
|
|
16968
|
-
"search.filters.representationType": "",
|
|
16969
|
-
"search.filters.resourceType": "",
|
|
16876
|
+
"search.filters.representationType": "Repräsentationstyp",
|
|
16877
|
+
"search.filters.resourceType": "Ressourcentyp",
|
|
16970
16878
|
"search.filters.standard": "Standard",
|
|
16971
16879
|
"search.filters.title": "Ergebnisse filtern",
|
|
16972
16880
|
"search.filters.topic": "Thema",
|
|
@@ -16978,6 +16886,7 @@ var de = {
|
|
|
16978
16886
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16979
16887
|
"table.select.data": "Datenquelle",
|
|
16980
16888
|
"tooltip.html.copy": "HTML kopieren",
|
|
16889
|
+
"tooltip.id.copy": "",
|
|
16981
16890
|
"tooltip.url.copy": "URL kopieren",
|
|
16982
16891
|
"tooltip.url.open": "URL öffnen",
|
|
16983
16892
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17011,20 +16920,21 @@ var en = {
|
|
|
17011
16920
|
"chart.type.line": "line chart",
|
|
17012
16921
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17013
16922
|
"chart.type.pie": "pie chart",
|
|
16923
|
+
"dashboard.createRecord": "New record",
|
|
17014
16924
|
"dashboard.labels.mySpace": "My space",
|
|
17015
|
-
"dashboard.records.all": "
|
|
16925
|
+
"dashboard.records.all": "Metadata records",
|
|
17016
16926
|
"dashboard.records.myDraft": "My drafts",
|
|
17017
16927
|
"dashboard.records.myLibrary": "My library",
|
|
17018
16928
|
"dashboard.records.myOrg": "Organization",
|
|
17019
16929
|
"dashboard.records.myRecords": "My Records",
|
|
17020
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17021
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17022
16930
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17023
16931
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17024
16932
|
"dashboard.records.userDetail": "Name",
|
|
17025
16933
|
"dashboard.records.userEmail": "Email",
|
|
17026
16934
|
"dashboard.records.username": "Username",
|
|
17027
16935
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
16936
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
16937
|
+
"dashboard.results.listResources": "Show resources",
|
|
17028
16938
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17029
16939
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17030
16940
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17110,7 +17020,8 @@ var en = {
|
|
|
17110
17020
|
"datahub.news.contact.title": "A specific need?",
|
|
17111
17021
|
"datahub.news.feed": "News feed",
|
|
17112
17022
|
"datahub.news.figures": "Indicators",
|
|
17113
|
-
"datahub.
|
|
17023
|
+
"datahub.record.addToFavorites": "Add to favorites",
|
|
17024
|
+
"datahub.search.back": "Back",
|
|
17114
17025
|
"datahub.search.filter.all": "All",
|
|
17115
17026
|
"datahub.search.filter.generatedByWfs": "generated by an API",
|
|
17116
17027
|
"datahub.search.filter.others": "Others",
|
|
@@ -17170,10 +17081,18 @@ var en = {
|
|
|
17170
17081
|
"map.add.layer.file": "From a file",
|
|
17171
17082
|
"map.add.layer.wfs": "From WFS",
|
|
17172
17083
|
"map.add.layer.wms": "From WMS",
|
|
17084
|
+
"map.addFromFile.placeholder": "Click or drop a file here",
|
|
17085
|
+
"map.geocoding.placeholder": "Search for a place",
|
|
17086
|
+
"map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
|
|
17087
|
+
"map.layer.add": "Add",
|
|
17088
|
+
"map.layers.available": "Available Layers",
|
|
17173
17089
|
"map.layers.list": "Layers",
|
|
17174
17090
|
"map.loading.data": "Loading map data...",
|
|
17091
|
+
"map.loading.service": "Loading service...",
|
|
17175
17092
|
"map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
|
|
17176
17093
|
"map.select.layer": "Data source",
|
|
17094
|
+
"map.wfs.urlInput.hint": "Enter WFS service URL",
|
|
17095
|
+
"map.wms.urlInput.hint": "Enter WMS service URL",
|
|
17177
17096
|
"multiselect.filter.placeholder": "Search",
|
|
17178
17097
|
"nav.back": "Back",
|
|
17179
17098
|
next: next$5,
|
|
@@ -17207,42 +17126,47 @@ var en = {
|
|
|
17207
17126
|
"record.metadata.author": "Author",
|
|
17208
17127
|
"record.metadata.catalog": "Catalog",
|
|
17209
17128
|
"record.metadata.contact": "Contact",
|
|
17210
|
-
"record.metadata.
|
|
17211
|
-
"record.metadata.details": "Details",
|
|
17129
|
+
"record.metadata.details": "Technical information",
|
|
17212
17130
|
"record.metadata.download": "Downloads",
|
|
17213
17131
|
"record.metadata.formats": "Formats",
|
|
17214
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17215
17132
|
"record.metadata.keywords": "Keywords",
|
|
17133
|
+
"record.metadata.lastUpdate": "Last updated on",
|
|
17216
17134
|
"record.metadata.links": "Links",
|
|
17217
17135
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17218
17136
|
"record.metadata.origin": "About the data",
|
|
17137
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17138
|
+
"record.metadata.owner": "Catalog of origin",
|
|
17219
17139
|
"record.metadata.preview": "Preview",
|
|
17220
17140
|
"record.metadata.publications": "publications",
|
|
17221
17141
|
"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
|
|
17142
|
+
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
17143
|
+
"record.metadata.quality.contact.success": "Contact is specified",
|
|
17144
|
+
"record.metadata.quality.description.failed": "Description is not specified",
|
|
17145
|
+
"record.metadata.quality.description.success": "Description is specified",
|
|
17226
17146
|
"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
|
|
17147
|
+
"record.metadata.quality.keywords.failed": "Keywords are not specified",
|
|
17148
|
+
"record.metadata.quality.keywords.success": "Keywords are specified",
|
|
17149
|
+
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
|
|
17150
|
+
"record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
|
|
17151
|
+
"record.metadata.quality.organisation.failed": "Organisation is not specified",
|
|
17152
|
+
"record.metadata.quality.organisation.success": "Organisation is specified",
|
|
17153
|
+
"record.metadata.quality.title.failed": "Title is not specified",
|
|
17154
|
+
"record.metadata.quality.title.success": "Title is specified",
|
|
17155
|
+
"record.metadata.quality.topic.failed": "Topic is not specified",
|
|
17156
|
+
"record.metadata.quality.topic.success": "Topic is specified",
|
|
17157
|
+
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
17158
|
+
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17239
17159
|
"record.metadata.related": "Related records",
|
|
17240
|
-
"record.metadata.sheet": "
|
|
17160
|
+
"record.metadata.sheet": "Original metadata",
|
|
17161
|
+
"record.metadata.status": "Status",
|
|
17162
|
+
"record.metadata.themes": "Categories",
|
|
17241
17163
|
"record.metadata.title": "Title",
|
|
17164
|
+
"record.metadata.type": "Geographical dataset",
|
|
17165
|
+
"record.metadata.uniqueId": "Unique Identifier",
|
|
17242
17166
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17243
17167
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17244
17168
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17245
|
-
"record.metadata.usage": "
|
|
17169
|
+
"record.metadata.usage": "License and Conditions",
|
|
17246
17170
|
"record.more.details": "Read more",
|
|
17247
17171
|
"record.tab.chart": "Chart",
|
|
17248
17172
|
"record.tab.data": "Table",
|
|
@@ -17302,6 +17226,7 @@ var en = {
|
|
|
17302
17226
|
"table.object.count": "objects in this dataset",
|
|
17303
17227
|
"table.select.data": "Data source",
|
|
17304
17228
|
"tooltip.html.copy": "Copy HTML",
|
|
17229
|
+
"tooltip.id.copy": "Copy unique identifier",
|
|
17305
17230
|
"tooltip.url.copy": "Copy URL",
|
|
17306
17231
|
"tooltip.url.open": "Open URL",
|
|
17307
17232
|
"ui.readLess": "Read less",
|
|
@@ -17335,20 +17260,21 @@ var es = {
|
|
|
17335
17260
|
"chart.type.line": "gráfico de líneas",
|
|
17336
17261
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17337
17262
|
"chart.type.pie": "gráfico circular",
|
|
17263
|
+
"dashboard.createRecord": "",
|
|
17338
17264
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17339
17265
|
"dashboard.records.all": "Catálogo",
|
|
17340
17266
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17341
17267
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17342
17268
|
"dashboard.records.myOrg": "Organización",
|
|
17343
17269
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17344
|
-
"dashboard.records.noRecord": "",
|
|
17345
|
-
"dashboard.records.noUser": "",
|
|
17346
17270
|
"dashboard.records.publishedRecords": "",
|
|
17347
17271
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17348
17272
|
"dashboard.records.userDetail": "",
|
|
17349
17273
|
"dashboard.records.userEmail": "",
|
|
17350
17274
|
"dashboard.records.username": "",
|
|
17351
17275
|
"dashboard.records.users": "",
|
|
17276
|
+
"dashboard.results.listMetadata": "",
|
|
17277
|
+
"dashboard.results.listResources": "",
|
|
17352
17278
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17353
17279
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17354
17280
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17434,6 +17360,7 @@ var es = {
|
|
|
17434
17360
|
"datahub.news.contact.title": "",
|
|
17435
17361
|
"datahub.news.feed": "",
|
|
17436
17362
|
"datahub.news.figures": "",
|
|
17363
|
+
"datahub.record.addToFavorites": "",
|
|
17437
17364
|
"datahub.search.back": "",
|
|
17438
17365
|
"datahub.search.filter.all": "",
|
|
17439
17366
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -17494,10 +17421,18 @@ var es = {
|
|
|
17494
17421
|
"map.add.layer.file": "",
|
|
17495
17422
|
"map.add.layer.wfs": "",
|
|
17496
17423
|
"map.add.layer.wms": "",
|
|
17424
|
+
"map.addFromFile.placeholder": "",
|
|
17425
|
+
"map.geocoding.placeholder": "",
|
|
17426
|
+
"map.help.addFromFile": "",
|
|
17427
|
+
"map.layer.add": "",
|
|
17428
|
+
"map.layers.available": "",
|
|
17497
17429
|
"map.layers.list": "",
|
|
17498
17430
|
"map.loading.data": "",
|
|
17431
|
+
"map.loading.service": "",
|
|
17499
17432
|
"map.navigation.message": "",
|
|
17500
17433
|
"map.select.layer": "",
|
|
17434
|
+
"map.wfs.urlInput.hint": "",
|
|
17435
|
+
"map.wms.urlInput.hint": "",
|
|
17501
17436
|
"multiselect.filter.placeholder": "",
|
|
17502
17437
|
"nav.back": "",
|
|
17503
17438
|
next: next$4,
|
|
@@ -17531,15 +17466,16 @@ var es = {
|
|
|
17531
17466
|
"record.metadata.author": "",
|
|
17532
17467
|
"record.metadata.catalog": "",
|
|
17533
17468
|
"record.metadata.contact": "",
|
|
17534
|
-
"record.metadata.createdOn": "",
|
|
17535
17469
|
"record.metadata.details": "",
|
|
17536
17470
|
"record.metadata.download": "",
|
|
17537
17471
|
"record.metadata.formats": "",
|
|
17538
|
-
"record.metadata.isOpenData": "",
|
|
17539
17472
|
"record.metadata.keywords": "",
|
|
17473
|
+
"record.metadata.lastUpdate": "",
|
|
17540
17474
|
"record.metadata.links": "",
|
|
17541
17475
|
"record.metadata.noUsage": "",
|
|
17542
17476
|
"record.metadata.origin": "",
|
|
17477
|
+
"record.metadata.otherConstraints": "",
|
|
17478
|
+
"record.metadata.owner": "",
|
|
17543
17479
|
"record.metadata.preview": "",
|
|
17544
17480
|
"record.metadata.publications": "",
|
|
17545
17481
|
"record.metadata.quality": "",
|
|
@@ -17562,7 +17498,11 @@ var es = {
|
|
|
17562
17498
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17563
17499
|
"record.metadata.related": "",
|
|
17564
17500
|
"record.metadata.sheet": "",
|
|
17501
|
+
"record.metadata.status": "",
|
|
17502
|
+
"record.metadata.themes": "",
|
|
17565
17503
|
"record.metadata.title": "",
|
|
17504
|
+
"record.metadata.type": "",
|
|
17505
|
+
"record.metadata.uniqueId": "",
|
|
17566
17506
|
"record.metadata.updateFrequency": "",
|
|
17567
17507
|
"record.metadata.updateStatus": "",
|
|
17568
17508
|
"record.metadata.updatedOn": "",
|
|
@@ -17626,6 +17566,7 @@ var es = {
|
|
|
17626
17566
|
"table.object.count": "",
|
|
17627
17567
|
"table.select.data": "",
|
|
17628
17568
|
"tooltip.html.copy": "",
|
|
17569
|
+
"tooltip.id.copy": "",
|
|
17629
17570
|
"tooltip.url.copy": "",
|
|
17630
17571
|
"tooltip.url.open": "",
|
|
17631
17572
|
"ui.readLess": "",
|
|
@@ -17659,20 +17600,21 @@ var fr = {
|
|
|
17659
17600
|
"chart.type.line": "ligne",
|
|
17660
17601
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17661
17602
|
"chart.type.pie": "camembert",
|
|
17603
|
+
"dashboard.createRecord": "",
|
|
17662
17604
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17663
17605
|
"dashboard.records.all": "Catalogue",
|
|
17664
17606
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17665
17607
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17666
17608
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17667
17609
|
"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
17610
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17671
17611
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17672
17612
|
"dashboard.records.userDetail": "Nom",
|
|
17673
17613
|
"dashboard.records.userEmail": "Email",
|
|
17674
17614
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17675
17615
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17616
|
+
"dashboard.results.listMetadata": "",
|
|
17617
|
+
"dashboard.results.listResources": "",
|
|
17676
17618
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17677
17619
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17678
17620
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17754,11 +17696,12 @@ var fr = {
|
|
|
17754
17696
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17755
17697
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17756
17698
|
"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
|
|
17699
|
+
"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
17700
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17759
17701
|
"datahub.news.feed": "Fil d'activité",
|
|
17760
17702
|
"datahub.news.figures": "Quelques chiffres",
|
|
17761
|
-
"datahub.
|
|
17703
|
+
"datahub.record.addToFavorites": "Ajouter aux favoris",
|
|
17704
|
+
"datahub.search.back": "Retour",
|
|
17762
17705
|
"datahub.search.filter.all": "Tous",
|
|
17763
17706
|
"datahub.search.filter.generatedByWfs": "généré par une API",
|
|
17764
17707
|
"datahub.search.filter.others": "Autres",
|
|
@@ -17818,10 +17761,18 @@ var fr = {
|
|
|
17818
17761
|
"map.add.layer.file": "",
|
|
17819
17762
|
"map.add.layer.wfs": "",
|
|
17820
17763
|
"map.add.layer.wms": "",
|
|
17764
|
+
"map.addFromFile.placeholder": "",
|
|
17765
|
+
"map.geocoding.placeholder": "",
|
|
17766
|
+
"map.help.addFromFile": "",
|
|
17767
|
+
"map.layer.add": "",
|
|
17768
|
+
"map.layers.available": "",
|
|
17821
17769
|
"map.layers.list": "",
|
|
17822
17770
|
"map.loading.data": "Chargement des données...",
|
|
17771
|
+
"map.loading.service": "",
|
|
17823
17772
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17824
17773
|
"map.select.layer": "Source de données",
|
|
17774
|
+
"map.wfs.urlInput.hint": "",
|
|
17775
|
+
"map.wms.urlInput.hint": "",
|
|
17825
17776
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17826
17777
|
"nav.back": "Retour",
|
|
17827
17778
|
next: next$3,
|
|
@@ -17855,15 +17806,16 @@ var fr = {
|
|
|
17855
17806
|
"record.metadata.author": "Auteur",
|
|
17856
17807
|
"record.metadata.catalog": "Catalogue",
|
|
17857
17808
|
"record.metadata.contact": "Contact",
|
|
17858
|
-
"record.metadata.
|
|
17859
|
-
"record.metadata.details": "Détails",
|
|
17809
|
+
"record.metadata.details": "Informations techniques",
|
|
17860
17810
|
"record.metadata.download": "Téléchargements",
|
|
17861
17811
|
"record.metadata.formats": "Formats",
|
|
17862
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17863
17812
|
"record.metadata.keywords": "Mots clés",
|
|
17813
|
+
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17864
17814
|
"record.metadata.links": "Liens",
|
|
17865
17815
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17866
17816
|
"record.metadata.origin": "À propos des données",
|
|
17817
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17818
|
+
"record.metadata.owner": "Catalogue d'origine",
|
|
17867
17819
|
"record.metadata.preview": "Aperçu",
|
|
17868
17820
|
"record.metadata.publications": "données",
|
|
17869
17821
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
@@ -17885,12 +17837,16 @@ var fr = {
|
|
|
17885
17837
|
"record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
|
|
17886
17838
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17887
17839
|
"record.metadata.related": "Voir aussi",
|
|
17888
|
-
"record.metadata.sheet": "
|
|
17840
|
+
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17841
|
+
"record.metadata.status": "",
|
|
17842
|
+
"record.metadata.themes": "Catégories",
|
|
17889
17843
|
"record.metadata.title": "Titre",
|
|
17844
|
+
"record.metadata.type": "Donnée géographique",
|
|
17845
|
+
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17890
17846
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17891
17847
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17892
17848
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17893
|
-
"record.metadata.usage": "
|
|
17849
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17894
17850
|
"record.more.details": "Détails",
|
|
17895
17851
|
"record.tab.chart": "Graphique",
|
|
17896
17852
|
"record.tab.data": "Tableau",
|
|
@@ -17950,6 +17906,7 @@ var fr = {
|
|
|
17950
17906
|
"table.object.count": "enregistrements dans ces données",
|
|
17951
17907
|
"table.select.data": "Source de données",
|
|
17952
17908
|
"tooltip.html.copy": "Copier le HTML",
|
|
17909
|
+
"tooltip.id.copy": "Copier l'identifiant unique",
|
|
17953
17910
|
"tooltip.url.copy": "Copier l'URL",
|
|
17954
17911
|
"tooltip.url.open": "Ouvrir l'URL",
|
|
17955
17912
|
"ui.readLess": "Réduire",
|
|
@@ -17983,20 +17940,21 @@ var it = {
|
|
|
17983
17940
|
"chart.type.line": "grafico a linee",
|
|
17984
17941
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
17985
17942
|
"chart.type.pie": "grafico a torta",
|
|
17943
|
+
"dashboard.createRecord": "",
|
|
17986
17944
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
17987
17945
|
"dashboard.records.all": "Catalogo",
|
|
17988
17946
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
17989
17947
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
17990
17948
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
17991
17949
|
"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
17950
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
17995
17951
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
17996
17952
|
"dashboard.records.userDetail": "Nome",
|
|
17997
17953
|
"dashboard.records.userEmail": "Email",
|
|
17998
17954
|
"dashboard.records.username": "Nome utente",
|
|
17999
17955
|
"dashboard.records.users": "utenti",
|
|
17956
|
+
"dashboard.results.listMetadata": "",
|
|
17957
|
+
"dashboard.results.listResources": "",
|
|
18000
17958
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18001
17959
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18002
17960
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18077,12 +18035,13 @@ var it = {
|
|
|
18077
18035
|
"datahub.header.organisations": "Organizzazioni",
|
|
18078
18036
|
"datahub.header.popularRecords": "Più popolari",
|
|
18079
18037
|
"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": "",
|
|
18038
|
+
"datahub.news.contact.contactus": "Contattateci",
|
|
18039
|
+
"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>",
|
|
18040
|
+
"datahub.news.contact.title": "Ha un bisogno specifico?",
|
|
18083
18041
|
"datahub.news.feed": "Feed di attività",
|
|
18084
18042
|
"datahub.news.figures": "Alcune figure",
|
|
18085
|
-
"datahub.
|
|
18043
|
+
"datahub.record.addToFavorites": "Aggiungere a miei preferiti",
|
|
18044
|
+
"datahub.search.back": "Ritorna",
|
|
18086
18045
|
"datahub.search.filter.all": "Tutti",
|
|
18087
18046
|
"datahub.search.filter.generatedByWfs": "generato da un'API",
|
|
18088
18047
|
"datahub.search.filter.others": "Altri",
|
|
@@ -18109,7 +18068,7 @@ var it = {
|
|
|
18109
18068
|
"downloads.format.unknown": "sconosciuto",
|
|
18110
18069
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18111
18070
|
dropFile: dropFile$2,
|
|
18112
|
-
"externalviewer.dataset.unnamed": "",
|
|
18071
|
+
"externalviewer.dataset.unnamed": "Layer del datahub",
|
|
18113
18072
|
"facets.block.title.OrgForResource": "Organizzazione",
|
|
18114
18073
|
"facets.block.title.availableInServices": "Disponibile per",
|
|
18115
18074
|
"facets.block.title.cl_hierarchyLevel.key": "Tipo di risorsa",
|
|
@@ -18142,10 +18101,18 @@ var it = {
|
|
|
18142
18101
|
"map.add.layer.file": "Da un file",
|
|
18143
18102
|
"map.add.layer.wfs": "Da un WFS",
|
|
18144
18103
|
"map.add.layer.wms": "Da un WMS",
|
|
18104
|
+
"map.addFromFile.placeholder": "",
|
|
18105
|
+
"map.geocoding.placeholder": "",
|
|
18106
|
+
"map.help.addFromFile": "",
|
|
18107
|
+
"map.layer.add": "",
|
|
18108
|
+
"map.layers.available": "",
|
|
18145
18109
|
"map.layers.list": "Layers",
|
|
18146
18110
|
"map.loading.data": "Caricamento dati...",
|
|
18111
|
+
"map.loading.service": "",
|
|
18147
18112
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18148
18113
|
"map.select.layer": "Sorgente dati",
|
|
18114
|
+
"map.wfs.urlInput.hint": "",
|
|
18115
|
+
"map.wms.urlInput.hint": "",
|
|
18149
18116
|
"multiselect.filter.placeholder": "Cerca",
|
|
18150
18117
|
"nav.back": "Indietro",
|
|
18151
18118
|
next: next$2,
|
|
@@ -18179,15 +18146,16 @@ var it = {
|
|
|
18179
18146
|
"record.metadata.author": "Autore",
|
|
18180
18147
|
"record.metadata.catalog": "Catalogo",
|
|
18181
18148
|
"record.metadata.contact": "Contatto",
|
|
18182
|
-
"record.metadata.
|
|
18183
|
-
"record.metadata.details": "Dettagli",
|
|
18149
|
+
"record.metadata.details": "Informazioni tecniche",
|
|
18184
18150
|
"record.metadata.download": "Download",
|
|
18185
18151
|
"record.metadata.formats": "Formati",
|
|
18186
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18187
18152
|
"record.metadata.keywords": "Parole chiave",
|
|
18153
|
+
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18188
18154
|
"record.metadata.links": "Collegamenti",
|
|
18189
18155
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18190
18156
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18157
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18158
|
+
"record.metadata.owner": "Catalogo originale",
|
|
18191
18159
|
"record.metadata.preview": "Anteprima",
|
|
18192
18160
|
"record.metadata.publications": "pubblicazioni",
|
|
18193
18161
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -18209,12 +18177,16 @@ var it = {
|
|
|
18209
18177
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
18210
18178
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18211
18179
|
"record.metadata.related": "Vedi anche",
|
|
18212
|
-
"record.metadata.sheet": "
|
|
18180
|
+
"record.metadata.sheet": "Origine del metadata",
|
|
18181
|
+
"record.metadata.status": "",
|
|
18182
|
+
"record.metadata.themes": "Categorie",
|
|
18213
18183
|
"record.metadata.title": "Titolo",
|
|
18184
|
+
"record.metadata.type": "Dati geografici",
|
|
18185
|
+
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18214
18186
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18215
18187
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18216
18188
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18217
|
-
"record.metadata.usage": "
|
|
18189
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18218
18190
|
"record.more.details": "Dettagli",
|
|
18219
18191
|
"record.tab.chart": "Grafico",
|
|
18220
18192
|
"record.tab.data": "Tabella",
|
|
@@ -18222,10 +18194,10 @@ var it = {
|
|
|
18222
18194
|
"record.was.created.time": "ha creato questi dati {time}",
|
|
18223
18195
|
records: records$2,
|
|
18224
18196
|
"results.layout.selectOne": "Mostra risultati",
|
|
18225
|
-
"results.records.hits.displayedOn": "",
|
|
18197
|
+
"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
18198
|
"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
18199
|
"results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
|
|
18228
|
-
"results.records.hits.selected": "",
|
|
18200
|
+
"results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
|
|
18229
18201
|
"results.showMore": "Altri risultati...",
|
|
18230
18202
|
"results.sortBy.dateStamp": "Più recente",
|
|
18231
18203
|
"results.sortBy.popularity": "Popolarità",
|
|
@@ -18274,10 +18246,11 @@ var it = {
|
|
|
18274
18246
|
"table.object.count": "record in questi dati",
|
|
18275
18247
|
"table.select.data": "Sorgente dati",
|
|
18276
18248
|
"tooltip.html.copy": "Copiare il HTML",
|
|
18249
|
+
"tooltip.id.copy": "Copiare l'identificatore unico",
|
|
18277
18250
|
"tooltip.url.copy": "Copiare l'URL",
|
|
18278
18251
|
"tooltip.url.open": "Aprire l'URL",
|
|
18279
|
-
"ui.readLess": "",
|
|
18280
|
-
"ui.readMore": "",
|
|
18252
|
+
"ui.readLess": "Ridurre",
|
|
18253
|
+
"ui.readMore": "Leggi di più",
|
|
18281
18254
|
"wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
|
|
18282
18255
|
"wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
|
|
18283
18256
|
"wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
|
|
@@ -18307,20 +18280,21 @@ var nl = {
|
|
|
18307
18280
|
"chart.type.line": "lijndiagram",
|
|
18308
18281
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18309
18282
|
"chart.type.pie": "cirkeldiagram",
|
|
18283
|
+
"dashboard.createRecord": "",
|
|
18310
18284
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18311
18285
|
"dashboard.records.all": "Catalogus",
|
|
18312
18286
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18313
18287
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18314
18288
|
"dashboard.records.myOrg": "Organisatie",
|
|
18315
18289
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18316
|
-
"dashboard.records.noRecord": "",
|
|
18317
|
-
"dashboard.records.noUser": "",
|
|
18318
18290
|
"dashboard.records.publishedRecords": "",
|
|
18319
18291
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18320
18292
|
"dashboard.records.userDetail": "",
|
|
18321
18293
|
"dashboard.records.userEmail": "",
|
|
18322
18294
|
"dashboard.records.username": "",
|
|
18323
18295
|
"dashboard.records.users": "",
|
|
18296
|
+
"dashboard.results.listMetadata": "",
|
|
18297
|
+
"dashboard.results.listResources": "",
|
|
18324
18298
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18325
18299
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18326
18300
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18406,6 +18380,7 @@ var nl = {
|
|
|
18406
18380
|
"datahub.news.contact.title": "",
|
|
18407
18381
|
"datahub.news.feed": "",
|
|
18408
18382
|
"datahub.news.figures": "",
|
|
18383
|
+
"datahub.record.addToFavorites": "",
|
|
18409
18384
|
"datahub.search.back": "",
|
|
18410
18385
|
"datahub.search.filter.all": "",
|
|
18411
18386
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18466,10 +18441,18 @@ var nl = {
|
|
|
18466
18441
|
"map.add.layer.file": "",
|
|
18467
18442
|
"map.add.layer.wfs": "",
|
|
18468
18443
|
"map.add.layer.wms": "",
|
|
18444
|
+
"map.addFromFile.placeholder": "",
|
|
18445
|
+
"map.geocoding.placeholder": "",
|
|
18446
|
+
"map.help.addFromFile": "",
|
|
18447
|
+
"map.layer.add": "",
|
|
18448
|
+
"map.layers.available": "",
|
|
18469
18449
|
"map.layers.list": "",
|
|
18470
18450
|
"map.loading.data": "",
|
|
18451
|
+
"map.loading.service": "",
|
|
18471
18452
|
"map.navigation.message": "",
|
|
18472
18453
|
"map.select.layer": "",
|
|
18454
|
+
"map.wfs.urlInput.hint": "",
|
|
18455
|
+
"map.wms.urlInput.hint": "",
|
|
18473
18456
|
"multiselect.filter.placeholder": "",
|
|
18474
18457
|
"nav.back": "",
|
|
18475
18458
|
next: next$1,
|
|
@@ -18503,15 +18486,16 @@ var nl = {
|
|
|
18503
18486
|
"record.metadata.author": "",
|
|
18504
18487
|
"record.metadata.catalog": "",
|
|
18505
18488
|
"record.metadata.contact": "",
|
|
18506
|
-
"record.metadata.createdOn": "",
|
|
18507
18489
|
"record.metadata.details": "",
|
|
18508
18490
|
"record.metadata.download": "",
|
|
18509
18491
|
"record.metadata.formats": "",
|
|
18510
|
-
"record.metadata.isOpenData": "",
|
|
18511
18492
|
"record.metadata.keywords": "",
|
|
18493
|
+
"record.metadata.lastUpdate": "",
|
|
18512
18494
|
"record.metadata.links": "",
|
|
18513
18495
|
"record.metadata.noUsage": "",
|
|
18514
18496
|
"record.metadata.origin": "",
|
|
18497
|
+
"record.metadata.otherConstraints": "",
|
|
18498
|
+
"record.metadata.owner": "",
|
|
18515
18499
|
"record.metadata.preview": "",
|
|
18516
18500
|
"record.metadata.publications": "",
|
|
18517
18501
|
"record.metadata.quality": "",
|
|
@@ -18534,7 +18518,11 @@ var nl = {
|
|
|
18534
18518
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18535
18519
|
"record.metadata.related": "",
|
|
18536
18520
|
"record.metadata.sheet": "",
|
|
18521
|
+
"record.metadata.status": "",
|
|
18522
|
+
"record.metadata.themes": "",
|
|
18537
18523
|
"record.metadata.title": "",
|
|
18524
|
+
"record.metadata.type": "",
|
|
18525
|
+
"record.metadata.uniqueId": "",
|
|
18538
18526
|
"record.metadata.updateFrequency": "",
|
|
18539
18527
|
"record.metadata.updateStatus": "",
|
|
18540
18528
|
"record.metadata.updatedOn": "",
|
|
@@ -18598,6 +18586,7 @@ var nl = {
|
|
|
18598
18586
|
"table.object.count": "",
|
|
18599
18587
|
"table.select.data": "",
|
|
18600
18588
|
"tooltip.html.copy": "",
|
|
18589
|
+
"tooltip.id.copy": "",
|
|
18601
18590
|
"tooltip.url.copy": "",
|
|
18602
18591
|
"tooltip.url.open": "",
|
|
18603
18592
|
"ui.readLess": "",
|
|
@@ -18631,20 +18620,21 @@ var pt = {
|
|
|
18631
18620
|
"chart.type.line": "gráfico de linha",
|
|
18632
18621
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18633
18622
|
"chart.type.pie": "gráfico de pizza",
|
|
18623
|
+
"dashboard.createRecord": "",
|
|
18634
18624
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18635
18625
|
"dashboard.records.all": "Catálogo",
|
|
18636
18626
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18637
18627
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18638
18628
|
"dashboard.records.myOrg": "Organização",
|
|
18639
18629
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18640
|
-
"dashboard.records.noRecord": "",
|
|
18641
|
-
"dashboard.records.noUser": "",
|
|
18642
18630
|
"dashboard.records.publishedRecords": "",
|
|
18643
18631
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18644
18632
|
"dashboard.records.userDetail": "",
|
|
18645
18633
|
"dashboard.records.userEmail": "",
|
|
18646
18634
|
"dashboard.records.username": "",
|
|
18647
18635
|
"dashboard.records.users": "",
|
|
18636
|
+
"dashboard.results.listMetadata": "",
|
|
18637
|
+
"dashboard.results.listResources": "",
|
|
18648
18638
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18649
18639
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18650
18640
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18730,6 +18720,7 @@ var pt = {
|
|
|
18730
18720
|
"datahub.news.contact.title": "",
|
|
18731
18721
|
"datahub.news.feed": "",
|
|
18732
18722
|
"datahub.news.figures": "",
|
|
18723
|
+
"datahub.record.addToFavorites": "",
|
|
18733
18724
|
"datahub.search.back": "",
|
|
18734
18725
|
"datahub.search.filter.all": "",
|
|
18735
18726
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18790,10 +18781,18 @@ var pt = {
|
|
|
18790
18781
|
"map.add.layer.file": "",
|
|
18791
18782
|
"map.add.layer.wfs": "",
|
|
18792
18783
|
"map.add.layer.wms": "",
|
|
18784
|
+
"map.addFromFile.placeholder": "",
|
|
18785
|
+
"map.geocoding.placeholder": "",
|
|
18786
|
+
"map.help.addFromFile": "",
|
|
18787
|
+
"map.layer.add": "",
|
|
18788
|
+
"map.layers.available": "",
|
|
18793
18789
|
"map.layers.list": "",
|
|
18794
18790
|
"map.loading.data": "",
|
|
18791
|
+
"map.loading.service": "",
|
|
18795
18792
|
"map.navigation.message": "",
|
|
18796
18793
|
"map.select.layer": "",
|
|
18794
|
+
"map.wfs.urlInput.hint": "",
|
|
18795
|
+
"map.wms.urlInput.hint": "",
|
|
18797
18796
|
"multiselect.filter.placeholder": "",
|
|
18798
18797
|
"nav.back": "",
|
|
18799
18798
|
next: next,
|
|
@@ -18827,15 +18826,16 @@ var pt = {
|
|
|
18827
18826
|
"record.metadata.author": "",
|
|
18828
18827
|
"record.metadata.catalog": "",
|
|
18829
18828
|
"record.metadata.contact": "",
|
|
18830
|
-
"record.metadata.createdOn": "",
|
|
18831
18829
|
"record.metadata.details": "",
|
|
18832
18830
|
"record.metadata.download": "",
|
|
18833
18831
|
"record.metadata.formats": "",
|
|
18834
|
-
"record.metadata.isOpenData": "",
|
|
18835
18832
|
"record.metadata.keywords": "",
|
|
18833
|
+
"record.metadata.lastUpdate": "",
|
|
18836
18834
|
"record.metadata.links": "",
|
|
18837
18835
|
"record.metadata.noUsage": "",
|
|
18838
18836
|
"record.metadata.origin": "",
|
|
18837
|
+
"record.metadata.otherConstraints": "",
|
|
18838
|
+
"record.metadata.owner": "",
|
|
18839
18839
|
"record.metadata.preview": "",
|
|
18840
18840
|
"record.metadata.publications": "",
|
|
18841
18841
|
"record.metadata.quality": "",
|
|
@@ -18858,7 +18858,11 @@ var pt = {
|
|
|
18858
18858
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18859
18859
|
"record.metadata.related": "",
|
|
18860
18860
|
"record.metadata.sheet": "",
|
|
18861
|
+
"record.metadata.status": "",
|
|
18862
|
+
"record.metadata.themes": "",
|
|
18861
18863
|
"record.metadata.title": "",
|
|
18864
|
+
"record.metadata.type": "",
|
|
18865
|
+
"record.metadata.uniqueId": "",
|
|
18862
18866
|
"record.metadata.updateFrequency": "",
|
|
18863
18867
|
"record.metadata.updateStatus": "",
|
|
18864
18868
|
"record.metadata.updatedOn": "",
|
|
@@ -18922,6 +18926,7 @@ var pt = {
|
|
|
18922
18926
|
"table.object.count": "",
|
|
18923
18927
|
"table.select.data": "",
|
|
18924
18928
|
"tooltip.html.copy": "",
|
|
18929
|
+
"tooltip.id.copy": "",
|
|
18925
18930
|
"tooltip.url.copy": "",
|
|
18926
18931
|
"tooltip.url.open": "",
|
|
18927
18932
|
"ui.readLess": "",
|
|
@@ -19066,20 +19071,11 @@ class Gn4FieldMapper {
|
|
|
19066
19071
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19067
19072
|
],
|
|
19068
19073
|
}),
|
|
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
|
-
}),
|
|
19074
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19075
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19076
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19077
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19078
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19083
19079
|
lineageObject: (output, source) => ({
|
|
19084
19080
|
...output,
|
|
19085
19081
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19105,33 +19101,78 @@ class Gn4FieldMapper {
|
|
|
19105
19101
|
kind,
|
|
19106
19102
|
};
|
|
19107
19103
|
},
|
|
19104
|
+
geom: (output, source) => {
|
|
19105
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19106
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19107
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19108
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19109
|
+
return {
|
|
19110
|
+
...output,
|
|
19111
|
+
spatialExtents: [
|
|
19112
|
+
...spatialExtents,
|
|
19113
|
+
...geoms.map((geom, index) => {
|
|
19114
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19115
|
+
const geometry = shapes[index] ?? geom;
|
|
19116
|
+
return {
|
|
19117
|
+
...(description !== null ? { description } : null),
|
|
19118
|
+
geometry,
|
|
19119
|
+
};
|
|
19120
|
+
}),
|
|
19121
|
+
],
|
|
19122
|
+
};
|
|
19123
|
+
},
|
|
19124
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19125
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19126
|
+
return {
|
|
19127
|
+
...output,
|
|
19128
|
+
temporalExtents: ranges.map((range) => {
|
|
19129
|
+
const start = selectField(range, 'gte');
|
|
19130
|
+
const end = selectField(range, 'lte');
|
|
19131
|
+
return {
|
|
19132
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19133
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19134
|
+
};
|
|
19135
|
+
}),
|
|
19136
|
+
};
|
|
19137
|
+
},
|
|
19108
19138
|
};
|
|
19109
19139
|
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
|
-
|
|
19140
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19141
|
+
let outputField;
|
|
19142
|
+
switch (type) {
|
|
19143
|
+
case 'license':
|
|
19144
|
+
outputField = 'licenses';
|
|
19145
|
+
break;
|
|
19146
|
+
case 'legal':
|
|
19147
|
+
outputField = 'legalConstraints';
|
|
19148
|
+
break;
|
|
19149
|
+
case 'security':
|
|
19150
|
+
outputField = 'securityConstraints';
|
|
19151
|
+
break;
|
|
19152
|
+
case 'other':
|
|
19153
|
+
outputField = 'otherConstraints';
|
|
19154
|
+
break;
|
|
19155
|
+
}
|
|
19156
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19157
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19158
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19159
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19160
|
+
return {
|
|
19161
|
+
text,
|
|
19162
|
+
...(url ? { url } : {}),
|
|
19163
|
+
};
|
|
19164
|
+
}));
|
|
19165
|
+
const result = {
|
|
19166
|
+
...output,
|
|
19167
|
+
[outputField]: outputArray,
|
|
19168
|
+
};
|
|
19169
|
+
// avoid legal constraints being duplicates of licenses
|
|
19170
|
+
if ('legalConstraints' in result &&
|
|
19171
|
+
(type === 'legal' || type === 'license')) {
|
|
19172
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19173
|
+
}
|
|
19174
|
+
return result;
|
|
19175
|
+
};
|
|
19135
19176
|
this.mapLink = (sourceLink) => {
|
|
19136
19177
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19137
19178
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19179,17 +19220,6 @@ class Gn4FieldMapper {
|
|
|
19179
19220
|
extras: { ...(output.extras || {}), ...value },
|
|
19180
19221
|
});
|
|
19181
19222
|
}
|
|
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
19223
|
getMappingFn(fieldName) {
|
|
19194
19224
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19195
19225
|
}
|
|
@@ -19251,14 +19281,16 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19251
19281
|
recordUpdated: null,
|
|
19252
19282
|
ownerOrganization: null,
|
|
19253
19283
|
licenses: [],
|
|
19284
|
+
legalConstraints: [],
|
|
19285
|
+
securityConstraints: [],
|
|
19286
|
+
otherConstraints: [],
|
|
19254
19287
|
contacts: [],
|
|
19255
19288
|
contactsForResource: [],
|
|
19256
|
-
accessConstraints: [],
|
|
19257
19289
|
keywords: [],
|
|
19258
19290
|
themes: [],
|
|
19259
|
-
useLimitations: [],
|
|
19260
19291
|
spatialExtents: [],
|
|
19261
19292
|
temporalExtents: [],
|
|
19293
|
+
overviews: [],
|
|
19262
19294
|
};
|
|
19263
19295
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19264
19296
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -20292,36 +20324,23 @@ class SelectionService {
|
|
|
20292
20324
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20293
20325
|
}
|
|
20294
20326
|
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(() => {
|
|
20327
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20328
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20301
20329
|
this.addIdsToSelected(newIds);
|
|
20302
|
-
})
|
|
20330
|
+
});
|
|
20303
20331
|
}
|
|
20304
20332
|
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(() => {
|
|
20333
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20334
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20311
20335
|
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
20336
|
});
|
|
20320
|
-
|
|
20321
|
-
|
|
20322
|
-
|
|
20337
|
+
}
|
|
20338
|
+
async clearSelection() {
|
|
20339
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20340
|
+
const currentSelection = Array.from(response);
|
|
20341
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20323
20342
|
this.removeIdsFromSelected(currentSelection);
|
|
20324
|
-
})
|
|
20343
|
+
});
|
|
20325
20344
|
}
|
|
20326
20345
|
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
20346
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20639,6 +20658,8 @@ const defaultMapOptions = {
|
|
|
20639
20658
|
};
|
|
20640
20659
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20641
20660
|
|
|
20661
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20662
|
+
|
|
20642
20663
|
var MapContextLayerTypeEnum;
|
|
20643
20664
|
(function (MapContextLayerTypeEnum) {
|
|
20644
20665
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -20946,6 +20967,33 @@ function propagateToDocumentOnly(event) {
|
|
|
20946
20967
|
}, 0);
|
|
20947
20968
|
}
|
|
20948
20969
|
|
|
20970
|
+
function normalize(input) {
|
|
20971
|
+
return input
|
|
20972
|
+
.toLowerCase()
|
|
20973
|
+
.normalize('NFD') // explode composite chars (e.g. é) into multiple chars
|
|
20974
|
+
.replace(/[\u0300-\u036f]/g, '') // remove accents
|
|
20975
|
+
.replace(/œ/g, 'oe') // remove accents
|
|
20976
|
+
.replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
|
|
20977
|
+
}
|
|
20978
|
+
function asNormalizedParts(input) {
|
|
20979
|
+
return normalize(input)
|
|
20980
|
+
.split(/\s+/)
|
|
20981
|
+
.map((part) => part.trim())
|
|
20982
|
+
.filter((part) => part.length > 0);
|
|
20983
|
+
}
|
|
20984
|
+
/**
|
|
20985
|
+
* This creates a filter function based on a pattern (typically a user-input
|
|
20986
|
+
* search text).
|
|
20987
|
+
* @param pattern
|
|
20988
|
+
*/
|
|
20989
|
+
function createFuzzyFilter(pattern) {
|
|
20990
|
+
const patternParts = asNormalizedParts(pattern);
|
|
20991
|
+
return (input) => {
|
|
20992
|
+
const inputParts = asNormalizedParts(input);
|
|
20993
|
+
return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
|
|
20994
|
+
};
|
|
20995
|
+
}
|
|
20996
|
+
|
|
20949
20997
|
marker('downloads.wfs.featuretype.not.found');
|
|
20950
20998
|
const FORMATS = {
|
|
20951
20999
|
csv: {
|
|
@@ -20987,9 +21035,15 @@ const FORMATS = {
|
|
|
20987
21035
|
color: '#328556',
|
|
20988
21036
|
mimeTypes: ['x-gis/x-shapefile'],
|
|
20989
21037
|
},
|
|
21038
|
+
gml: {
|
|
21039
|
+
extensions: ['gml'],
|
|
21040
|
+
priority: 5,
|
|
21041
|
+
color: '#c92bce',
|
|
21042
|
+
mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
|
|
21043
|
+
},
|
|
20990
21044
|
kml: {
|
|
20991
21045
|
extensions: ['kml', 'kmz'],
|
|
20992
|
-
priority:
|
|
21046
|
+
priority: 6,
|
|
20993
21047
|
color: '#348009',
|
|
20994
21048
|
mimeTypes: [
|
|
20995
21049
|
'application/vnd.google-earth.kml+xml',
|
|
@@ -20998,34 +21052,40 @@ const FORMATS = {
|
|
|
20998
21052
|
},
|
|
20999
21053
|
gpkg: {
|
|
21000
21054
|
extensions: ['gpkg', 'geopackage'],
|
|
21001
|
-
priority:
|
|
21055
|
+
priority: 7,
|
|
21002
21056
|
color: '#ea79ba',
|
|
21003
21057
|
mimeTypes: ['application/geopackage+sqlite3'],
|
|
21004
21058
|
},
|
|
21005
21059
|
zip: {
|
|
21006
21060
|
extensions: ['zip', 'tar.gz'],
|
|
21007
|
-
priority:
|
|
21061
|
+
priority: 8,
|
|
21008
21062
|
color: '#f2bb3a',
|
|
21009
21063
|
mimeTypes: ['application/zip', 'application/x-zip'],
|
|
21010
21064
|
},
|
|
21011
21065
|
pdf: {
|
|
21012
21066
|
extensions: ['pdf'],
|
|
21013
|
-
priority:
|
|
21067
|
+
priority: 9,
|
|
21014
21068
|
color: '#db544a',
|
|
21015
21069
|
mimeTypes: ['application/pdf'],
|
|
21016
21070
|
},
|
|
21017
21071
|
jpg: {
|
|
21018
21072
|
extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
|
|
21019
|
-
priority:
|
|
21073
|
+
priority: 9,
|
|
21020
21074
|
color: '#673ab7',
|
|
21021
21075
|
mimeTypes: ['image/jpg'],
|
|
21022
21076
|
},
|
|
21023
21077
|
svg: {
|
|
21024
21078
|
extensions: ['svg'],
|
|
21025
|
-
priority:
|
|
21079
|
+
priority: 10,
|
|
21026
21080
|
color: '#d98294',
|
|
21027
21081
|
mimeTypes: ['image/svg+xml'],
|
|
21028
21082
|
},
|
|
21083
|
+
dxf: {
|
|
21084
|
+
extensions: ['dxf'],
|
|
21085
|
+
priority: 11,
|
|
21086
|
+
color: '#de630b',
|
|
21087
|
+
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
21088
|
+
},
|
|
21029
21089
|
};
|
|
21030
21090
|
function getFormatPriority(linkFormat) {
|
|
21031
21091
|
for (const format in FORMATS) {
|
|
@@ -21042,14 +21102,18 @@ function getFormatPriority(linkFormat) {
|
|
|
21042
21102
|
function getLinkPriority(link) {
|
|
21043
21103
|
return getFormatPriority(getFileFormat(link));
|
|
21044
21104
|
}
|
|
21045
|
-
function
|
|
21046
|
-
|
|
21047
|
-
|
|
21048
|
-
|
|
21049
|
-
|
|
21105
|
+
function getFileFormatFromServiceOutput(serviceOutput) {
|
|
21106
|
+
function formatMatcher(format) {
|
|
21107
|
+
const output = serviceOutput.toLowerCase();
|
|
21108
|
+
return (format.extensions.some((extension) => output.includes(extension)) ||
|
|
21109
|
+
format.mimeTypes.some((mimeType) => output.includes(mimeType)));
|
|
21110
|
+
}
|
|
21111
|
+
for (const formatName in FORMATS) {
|
|
21112
|
+
if (formatMatcher(FORMATS[formatName])) {
|
|
21113
|
+
return formatName;
|
|
21050
21114
|
}
|
|
21051
21115
|
}
|
|
21052
|
-
return
|
|
21116
|
+
return null;
|
|
21053
21117
|
}
|
|
21054
21118
|
function getFileFormat(link) {
|
|
21055
21119
|
if ('mimeType' in link) {
|
|
@@ -21190,72 +21254,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21190
21254
|
}]
|
|
21191
21255
|
}] });
|
|
21192
21256
|
|
|
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
21257
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21240
21258
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21259
|
+
const GEOJSON = new GeoJSON();
|
|
21241
21260
|
class MapUtilsService {
|
|
21242
|
-
constructor(http,
|
|
21261
|
+
constructor(http, proxy) {
|
|
21243
21262
|
this.http = http;
|
|
21244
|
-
this.
|
|
21263
|
+
this.proxy = proxy;
|
|
21245
21264
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21246
|
-
|
|
21265
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21247
21266
|
featureProjection,
|
|
21248
21267
|
dataProjection,
|
|
21249
21268
|
});
|
|
21250
|
-
return olFeatures;
|
|
21251
21269
|
};
|
|
21252
21270
|
}
|
|
21253
21271
|
createEmptyMap() {
|
|
21254
|
-
|
|
21272
|
+
return new Map$1({
|
|
21255
21273
|
controls: [],
|
|
21256
21274
|
pixelRatio: 1,
|
|
21257
21275
|
});
|
|
21258
|
-
return map;
|
|
21259
21276
|
}
|
|
21260
21277
|
isWMSLayer(layer) {
|
|
21261
21278
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21270,8 +21287,7 @@ class MapUtilsService {
|
|
|
21270
21287
|
...source.getParams(),
|
|
21271
21288
|
INFO_FORMAT: 'application/json',
|
|
21272
21289
|
};
|
|
21273
|
-
|
|
21274
|
-
return url;
|
|
21290
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21275
21291
|
}
|
|
21276
21292
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21277
21293
|
const features = [];
|
|
@@ -21299,38 +21315,56 @@ class MapUtilsService {
|
|
|
21299
21315
|
/**
|
|
21300
21316
|
* Will emit `null` if no extent could be computed
|
|
21301
21317
|
*/
|
|
21302
|
-
getLayerExtent(layer) {
|
|
21303
|
-
let
|
|
21318
|
+
async getLayerExtent(layer) {
|
|
21319
|
+
let latLonExtent;
|
|
21304
21320
|
if (layer &&
|
|
21305
21321
|
layer.type === 'geojson' &&
|
|
21306
21322
|
'data' in layer &&
|
|
21307
21323
|
typeof layer.data === 'object' &&
|
|
21308
21324
|
layer.data.features[0] &&
|
|
21309
21325
|
layer.data.features[0].geometry) {
|
|
21310
|
-
|
|
21311
|
-
.readFeatures(
|
|
21326
|
+
latLonExtent = new GeoJSON()
|
|
21327
|
+
.readFeatures(layer.data)
|
|
21312
21328
|
.map((feature) => feature.getGeometry())
|
|
21313
21329
|
.filter((geom) => !!geom)
|
|
21314
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21330
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21315
21331
|
}
|
|
21316
21332
|
else if (layer && layer.type === 'wms') {
|
|
21317
|
-
|
|
21333
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21318
21334
|
}
|
|
21319
21335
|
else if (layer && layer.type === 'wmts') {
|
|
21320
21336
|
if (layer.extent) {
|
|
21321
|
-
|
|
21337
|
+
latLonExtent = layer.extent;
|
|
21322
21338
|
}
|
|
21323
21339
|
else {
|
|
21324
|
-
return
|
|
21340
|
+
return layer.options.tileGrid.getExtent();
|
|
21325
21341
|
}
|
|
21326
21342
|
}
|
|
21327
21343
|
else {
|
|
21328
|
-
return
|
|
21344
|
+
return null;
|
|
21345
|
+
}
|
|
21346
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21347
|
+
return null;
|
|
21348
|
+
}
|
|
21349
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21350
|
+
}
|
|
21351
|
+
async getWmsLayerExtent(layer) {
|
|
21352
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21353
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21354
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21355
|
+
return null;
|
|
21356
|
+
}
|
|
21357
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21358
|
+
if (lonLatCRS) {
|
|
21359
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21360
|
+
}
|
|
21361
|
+
else {
|
|
21362
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21363
|
+
register(proj4);
|
|
21364
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21365
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21366
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21329
21367
|
}
|
|
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
21368
|
}
|
|
21335
21369
|
getWmtsLayerFromCapabilities(link) {
|
|
21336
21370
|
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
@@ -21386,7 +21420,18 @@ ${e.stack || e.message || e}`);
|
|
|
21386
21420
|
])
|
|
21387
21421
|
.getArray());
|
|
21388
21422
|
}
|
|
21389
|
-
|
|
21423
|
+
getRecordExtent(record) {
|
|
21424
|
+
if (!('spatialExtents' in record)) {
|
|
21425
|
+
return null;
|
|
21426
|
+
}
|
|
21427
|
+
// transform an array of geojson geometries into a bbox
|
|
21428
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21429
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21430
|
+
return extend(prev, geom.getExtent());
|
|
21431
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21432
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21433
|
+
}
|
|
21434
|
+
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
21435
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21391
21436
|
}
|
|
21392
21437
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21394,7 +21439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21394
21439
|
args: [{
|
|
21395
21440
|
providedIn: 'root',
|
|
21396
21441
|
}]
|
|
21397
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21442
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21398
21443
|
function dragPanCondition(event) {
|
|
21399
21444
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21400
21445
|
if (!dragPanCondition) {
|
|
@@ -22469,6 +22514,7 @@ const DEFAULT_VIEW = {
|
|
|
22469
22514
|
center: [0, 15],
|
|
22470
22515
|
zoom: 2,
|
|
22471
22516
|
};
|
|
22517
|
+
const WFS_MAX_FEATURES = 10000;
|
|
22472
22518
|
class MapContextService {
|
|
22473
22519
|
constructor(mapUtils, styleService) {
|
|
22474
22520
|
this.mapUtils = mapUtils;
|
|
@@ -22527,6 +22573,7 @@ class MapContextService {
|
|
|
22527
22573
|
urlObj.searchParams.set('typename', layerModel.name);
|
|
22528
22574
|
urlObj.searchParams.set('srsname', 'EPSG:3857');
|
|
22529
22575
|
urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
|
|
22576
|
+
urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
|
|
22530
22577
|
return urlObj.toString();
|
|
22531
22578
|
},
|
|
22532
22579
|
strategy: bbox,
|
|
@@ -23074,6 +23121,7 @@ class ThumbnailComponent {
|
|
|
23074
23121
|
constructor(optionalPlaceholderUrl) {
|
|
23075
23122
|
this.optionalPlaceholderUrl = optionalPlaceholderUrl;
|
|
23076
23123
|
this.fit = 'cover';
|
|
23124
|
+
this.placeholderShown = new EventEmitter();
|
|
23077
23125
|
this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
|
|
23078
23126
|
this.images = [];
|
|
23079
23127
|
}
|
|
@@ -23109,6 +23157,7 @@ class ThumbnailComponent {
|
|
|
23109
23157
|
setNewSrcImage(image) {
|
|
23110
23158
|
this.imgFit = image.fit;
|
|
23111
23159
|
this.imgUrl = image.url;
|
|
23160
|
+
this.placeholderShown.emit(this.isPlaceholder);
|
|
23112
23161
|
}
|
|
23113
23162
|
setPlaceholder() {
|
|
23114
23163
|
this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
|
|
@@ -23131,7 +23180,7 @@ class ThumbnailComponent {
|
|
|
23131
23180
|
}
|
|
23132
23181
|
}
|
|
23133
23182
|
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 }); }
|
|
23183
|
+
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
23184
|
}
|
|
23136
23185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23137
23186
|
type: Component,
|
|
@@ -23151,11 +23200,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23151
23200
|
}], containerElement: [{
|
|
23152
23201
|
type: ViewChild,
|
|
23153
23202
|
args: ['containerElement']
|
|
23203
|
+
}], placeholderShown: [{
|
|
23204
|
+
type: Output
|
|
23154
23205
|
}] } });
|
|
23155
23206
|
|
|
23156
23207
|
class RecordPreviewCardComponent extends RecordPreviewComponent {
|
|
23157
23208
|
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 }); }
|
|
23209
|
+
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
23210
|
}
|
|
23160
23211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
|
|
23161
23212
|
type: Component,
|
|
@@ -23164,7 +23215,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23164
23215
|
|
|
23165
23216
|
class RecordPreviewListComponent extends RecordPreviewComponent {
|
|
23166
23217
|
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 }); }
|
|
23218
|
+
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
23219
|
}
|
|
23169
23220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
|
|
23170
23221
|
type: Component,
|
|
@@ -23261,8 +23312,7 @@ class MetadataQualityComponent {
|
|
|
23261
23312
|
: this.calculatedQualityScore;
|
|
23262
23313
|
}
|
|
23263
23314
|
get calculatedQualityScore() {
|
|
23264
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23265
|
-
this.items.length);
|
|
23315
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23266
23316
|
}
|
|
23267
23317
|
showMenu() {
|
|
23268
23318
|
this.isMenuShown = true;
|
|
@@ -23312,7 +23362,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
23312
23362
|
this.elementRef = elementRef;
|
|
23313
23363
|
}
|
|
23314
23364
|
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 }); }
|
|
23365
|
+
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
23366
|
}
|
|
23317
23367
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
23318
23368
|
type: Component,
|
|
@@ -23330,7 +23380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23330
23380
|
|
|
23331
23381
|
class RecordPreviewTitleComponent extends RecordPreviewComponent {
|
|
23332
23382
|
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 }); }
|
|
23383
|
+
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
23384
|
}
|
|
23335
23385
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
|
|
23336
23386
|
type: Component,
|
|
@@ -23370,7 +23420,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
|
|
|
23370
23420
|
return this.timeFormat.format(this.record.recordCreated, Date.now());
|
|
23371
23421
|
}
|
|
23372
23422
|
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 }); }
|
|
23423
|
+
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
23424
|
}
|
|
23375
23425
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
|
|
23376
23426
|
type: Component,
|
|
@@ -23703,14 +23753,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23703
23753
|
args: ['contentDiv']
|
|
23704
23754
|
}] } });
|
|
23705
23755
|
|
|
23706
|
-
class
|
|
23756
|
+
class CopyTextButtonComponent {
|
|
23707
23757
|
constructor() {
|
|
23708
|
-
this.
|
|
23758
|
+
this.displayText = true;
|
|
23759
|
+
this.rows = 1;
|
|
23709
23760
|
}
|
|
23710
|
-
|
|
23711
|
-
|
|
23761
|
+
copyText(event) {
|
|
23762
|
+
navigator.clipboard.writeText(this.text);
|
|
23763
|
+
event.target.blur();
|
|
23764
|
+
}
|
|
23765
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23766
|
+
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 }); }
|
|
23712
23767
|
}
|
|
23713
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
23768
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
23769
|
+
type: Component,
|
|
23770
|
+
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" }]
|
|
23771
|
+
}], propDecorators: { text: [{
|
|
23772
|
+
type: Input
|
|
23773
|
+
}], tooltipText: [{
|
|
23774
|
+
type: Input
|
|
23775
|
+
}], displayText: [{
|
|
23776
|
+
type: Input
|
|
23777
|
+
}], rows: [{
|
|
23778
|
+
type: Input
|
|
23779
|
+
}] } });
|
|
23780
|
+
|
|
23781
|
+
class ContentGhostComponent {
|
|
23782
|
+
constructor() {
|
|
23783
|
+
this.ghostClass = '';
|
|
23784
|
+
}
|
|
23785
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23786
|
+
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 }); }
|
|
23787
|
+
}
|
|
23788
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, decorators: [{
|
|
23714
23789
|
type: Component,
|
|
23715
23790
|
args: [{ selector: 'gn-ui-content-ghost', changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
23716
23791
|
}], propDecorators: { showContent: [{
|
|
@@ -23857,22 +23932,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23857
23932
|
args: ['container']
|
|
23858
23933
|
}] } });
|
|
23859
23934
|
|
|
23935
|
+
class MarkdownParserComponent {
|
|
23936
|
+
get parsedMarkdown() {
|
|
23937
|
+
return marked.parse(this.textContent);
|
|
23938
|
+
}
|
|
23939
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23940
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}: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 }); }
|
|
23941
|
+
}
|
|
23942
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23943
|
+
type: Component,
|
|
23944
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}: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"] }]
|
|
23945
|
+
}], propDecorators: { textContent: [{
|
|
23946
|
+
type: Input
|
|
23947
|
+
}] } });
|
|
23948
|
+
|
|
23860
23949
|
class MetadataInfoComponent {
|
|
23861
23950
|
constructor() {
|
|
23862
23951
|
this.keyword = new EventEmitter();
|
|
23863
23952
|
}
|
|
23864
23953
|
get hasUsage() {
|
|
23865
23954
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23866
|
-
this.metadata.
|
|
23867
|
-
|
|
23955
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
23956
|
+
this.legalConstraints.length > 0) ||
|
|
23957
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
23958
|
+
this.otherConstraints.length > 0) ||
|
|
23959
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
23868
23960
|
}
|
|
23869
|
-
get
|
|
23961
|
+
get legalConstraints() {
|
|
23870
23962
|
let array = [];
|
|
23871
|
-
if (this.metadata.
|
|
23872
|
-
array = array.concat(this.metadata.
|
|
23963
|
+
if (this.metadata.legalConstraints?.length) {
|
|
23964
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23873
23965
|
}
|
|
23874
|
-
|
|
23875
|
-
|
|
23966
|
+
return array;
|
|
23967
|
+
}
|
|
23968
|
+
get otherConstraints() {
|
|
23969
|
+
let array = [];
|
|
23970
|
+
if (this.metadata.otherConstraints?.length) {
|
|
23971
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23972
|
+
}
|
|
23973
|
+
return array;
|
|
23974
|
+
}
|
|
23975
|
+
get licenses() {
|
|
23976
|
+
let array = [];
|
|
23977
|
+
if (this.metadata.licenses?.length) {
|
|
23978
|
+
array = array.concat(this.metadata.licenses
|
|
23979
|
+
.filter((c) => c.text)
|
|
23980
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23876
23981
|
}
|
|
23877
23982
|
return array;
|
|
23878
23983
|
}
|
|
@@ -23895,11 +24000,11 @@ class MetadataInfoComponent {
|
|
|
23895
24000
|
this.keyword.emit(keyword);
|
|
23896
24001
|
}
|
|
23897
24002
|
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: "<
|
|
24003
|
+
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: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23899
24004
|
}
|
|
23900
24005
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23901
24006
|
type: Component,
|
|
23902
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
24007
|
+
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
24008
|
}], propDecorators: { metadata: [{
|
|
23904
24009
|
type: Input
|
|
23905
24010
|
}], incomplete: [{
|
|
@@ -23935,13 +24040,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23935
24040
|
|
|
23936
24041
|
class ButtonComponent {
|
|
23937
24042
|
constructor() {
|
|
23938
|
-
this.type = 'default';
|
|
23939
24043
|
this.disabled = false;
|
|
23940
24044
|
this.extraClass = '';
|
|
23941
24045
|
this.buttonClick = new EventEmitter();
|
|
23942
24046
|
}
|
|
24047
|
+
// btn-classes are explicited to allow tailwind recognize them and add it in css.
|
|
24048
|
+
set type(value) {
|
|
24049
|
+
switch (value) {
|
|
24050
|
+
case 'primary':
|
|
24051
|
+
this.btnClass = 'btn-primary';
|
|
24052
|
+
break;
|
|
24053
|
+
case 'secondary':
|
|
24054
|
+
this.btnClass = 'btn-secondary';
|
|
24055
|
+
break;
|
|
24056
|
+
case 'outline':
|
|
24057
|
+
this.btnClass = 'btn-outline';
|
|
24058
|
+
break;
|
|
24059
|
+
case 'light':
|
|
24060
|
+
this.btnClass = 'btn-light';
|
|
24061
|
+
break;
|
|
24062
|
+
default:
|
|
24063
|
+
this.btnClass = 'btn-default';
|
|
24064
|
+
break;
|
|
24065
|
+
}
|
|
24066
|
+
}
|
|
23943
24067
|
get classList() {
|
|
23944
|
-
return
|
|
24068
|
+
return `${this.btnClass} ${this.extraClass}`;
|
|
23945
24069
|
}
|
|
23946
24070
|
handleClick(event) {
|
|
23947
24071
|
this.buttonClick.emit();
|
|
@@ -23949,11 +24073,11 @@ class ButtonComponent {
|
|
|
23949
24073
|
propagateToDocumentOnly(event);
|
|
23950
24074
|
}
|
|
23951
24075
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23952
|
-
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
|
|
24076
|
+
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 ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23953
24077
|
}
|
|
23954
24078
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
23955
24079
|
type: Component,
|
|
23956
|
-
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
|
|
24080
|
+
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 ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
23957
24081
|
}], propDecorators: { type: [{
|
|
23958
24082
|
type: Input
|
|
23959
24083
|
}], disabled: [{
|
|
@@ -24028,40 +24152,15 @@ class DownloadsListComponent {
|
|
|
24028
24152
|
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
24029
24153
|
}
|
|
24030
24154
|
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 }); }
|
|
24031
|
-
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
|
|
24155
|
+
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 }); }
|
|
24032
24156
|
}
|
|
24033
24157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
24034
24158
|
type: Component,
|
|
24035
|
-
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
|
|
24159
|
+
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" }]
|
|
24036
24160
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
24037
24161
|
type: Input
|
|
24038
24162
|
}] } });
|
|
24039
24163
|
|
|
24040
|
-
class CopyTextButtonComponent {
|
|
24041
|
-
constructor() {
|
|
24042
|
-
this.displayText = true;
|
|
24043
|
-
this.rows = 1;
|
|
24044
|
-
}
|
|
24045
|
-
copyText(event) {
|
|
24046
|
-
navigator.clipboard.writeText(this.text);
|
|
24047
|
-
event.target.blur();
|
|
24048
|
-
}
|
|
24049
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24050
|
-
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 }); }
|
|
24051
|
-
}
|
|
24052
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24053
|
-
type: Component,
|
|
24054
|
-
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" }]
|
|
24055
|
-
}], propDecorators: { text: [{
|
|
24056
|
-
type: Input
|
|
24057
|
-
}], tooltipText: [{
|
|
24058
|
-
type: Input
|
|
24059
|
-
}], displayText: [{
|
|
24060
|
-
type: Input
|
|
24061
|
-
}], rows: [{
|
|
24062
|
-
type: Input
|
|
24063
|
-
}] } });
|
|
24064
|
-
|
|
24065
24164
|
class ApiCardComponent {
|
|
24066
24165
|
constructor() {
|
|
24067
24166
|
this.currentlyActive = false;
|
|
@@ -24258,11 +24357,11 @@ class CarouselComponent {
|
|
|
24258
24357
|
this.emblaApi.scrollTo(stepIndex);
|
|
24259
24358
|
}
|
|
24260
24359
|
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 }); }
|
|
24261
|
-
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
|
|
24360
|
+
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 }); }
|
|
24262
24361
|
}
|
|
24263
24362
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24264
24363
|
type: Component,
|
|
24265
|
-
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
|
|
24364
|
+
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"] }]
|
|
24266
24365
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24267
24366
|
type: Input
|
|
24268
24367
|
}], stepsContainerClass: [{
|
|
@@ -24306,6 +24405,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24306
24405
|
}]
|
|
24307
24406
|
}] });
|
|
24308
24407
|
|
|
24408
|
+
class InteractiveTableColumnComponent {
|
|
24409
|
+
constructor() {
|
|
24410
|
+
this.grow = false;
|
|
24411
|
+
this.sortable = false;
|
|
24412
|
+
this.activeSort = null;
|
|
24413
|
+
this.sortChange = new EventEmitter();
|
|
24414
|
+
}
|
|
24415
|
+
handleSortChange() {
|
|
24416
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24417
|
+
this.sortChange.emit(this.activeSort);
|
|
24418
|
+
}
|
|
24419
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24420
|
+
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 }); }
|
|
24421
|
+
}
|
|
24422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24423
|
+
type: Component,
|
|
24424
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24425
|
+
}], propDecorators: { header: [{
|
|
24426
|
+
type: ContentChild,
|
|
24427
|
+
args: ['header']
|
|
24428
|
+
}], cell: [{
|
|
24429
|
+
type: ContentChild,
|
|
24430
|
+
args: ['cell']
|
|
24431
|
+
}], grow: [{
|
|
24432
|
+
type: Input
|
|
24433
|
+
}], sortable: [{
|
|
24434
|
+
type: Input
|
|
24435
|
+
}], activeSort: [{
|
|
24436
|
+
type: Input
|
|
24437
|
+
}], sortChange: [{
|
|
24438
|
+
type: Output
|
|
24439
|
+
}] } });
|
|
24440
|
+
|
|
24441
|
+
class InteractiveTableComponent {
|
|
24442
|
+
constructor() {
|
|
24443
|
+
this.items = [];
|
|
24444
|
+
this.itemClick = new EventEmitter();
|
|
24445
|
+
}
|
|
24446
|
+
get gridStyle() {
|
|
24447
|
+
return {
|
|
24448
|
+
'grid-template-columns': this.columns
|
|
24449
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24450
|
+
.join(' '),
|
|
24451
|
+
};
|
|
24452
|
+
}
|
|
24453
|
+
handleRowClick(item) {
|
|
24454
|
+
this.itemClick.emit(item);
|
|
24455
|
+
}
|
|
24456
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24457
|
+
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 }); }
|
|
24458
|
+
}
|
|
24459
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24460
|
+
type: Component,
|
|
24461
|
+
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"] }]
|
|
24462
|
+
}], propDecorators: { columns: [{
|
|
24463
|
+
type: ContentChildren,
|
|
24464
|
+
args: [InteractiveTableColumnComponent]
|
|
24465
|
+
}], items: [{
|
|
24466
|
+
type: Input
|
|
24467
|
+
}], itemClick: [{
|
|
24468
|
+
type: Output
|
|
24469
|
+
}] } });
|
|
24470
|
+
|
|
24309
24471
|
class LinkCardComponent {
|
|
24310
24472
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24311
24473
|
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 }); }
|
|
@@ -24319,11 +24481,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24319
24481
|
|
|
24320
24482
|
class RelatedRecordCardComponent {
|
|
24321
24483
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24322
|
-
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]
|
|
24484
|
+
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 }); }
|
|
24323
24485
|
}
|
|
24324
24486
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
24325
24487
|
type: Component,
|
|
24326
|
-
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]
|
|
24488
|
+
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" }]
|
|
24327
24489
|
}], propDecorators: { record: [{
|
|
24328
24490
|
type: Input
|
|
24329
24491
|
}] } });
|
|
@@ -24341,15 +24503,21 @@ class MetadataContactComponent {
|
|
|
24341
24503
|
? this.metadata.contactsForResource
|
|
24342
24504
|
: this.metadata.contacts) || []);
|
|
24343
24505
|
}
|
|
24506
|
+
get address() {
|
|
24507
|
+
const addressParts = this.contacts[0].address
|
|
24508
|
+
.split(',')
|
|
24509
|
+
.map((part) => part.trim());
|
|
24510
|
+
return addressParts;
|
|
24511
|
+
}
|
|
24344
24512
|
onOrganizationClick() {
|
|
24345
24513
|
this.organizationClick.emit(this.shownOrganization);
|
|
24346
24514
|
}
|
|
24347
24515
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24348
|
-
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
|
|
24516
|
+
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 }); }
|
|
24349
24517
|
}
|
|
24350
24518
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24351
24519
|
type: Component,
|
|
24352
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div
|
|
24520
|
+
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" }]
|
|
24353
24521
|
}], propDecorators: { metadata: [{
|
|
24354
24522
|
type: Input
|
|
24355
24523
|
}], organizationClick: [{
|
|
@@ -24615,7 +24783,10 @@ class DropdownMultiselectComponent {
|
|
|
24615
24783
|
return this.choices.filter((choice) => this.selected.indexOf(choice.value) > -1);
|
|
24616
24784
|
}
|
|
24617
24785
|
get filteredChoicesByText() {
|
|
24618
|
-
|
|
24786
|
+
if (!this.searchInputValue)
|
|
24787
|
+
return this.choices;
|
|
24788
|
+
const filter = createFuzzyFilter(this.searchInputValue);
|
|
24789
|
+
return this.choices.filter((choice) => filter(choice.label));
|
|
24619
24790
|
}
|
|
24620
24791
|
get focusedIndex() {
|
|
24621
24792
|
return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
|
|
@@ -24750,11 +24921,11 @@ class DropdownMultiselectComponent {
|
|
|
24750
24921
|
this.setFocus();
|
|
24751
24922
|
}
|
|
24752
24923
|
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 }); }
|
|
24753
|
-
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,
|
|
24924
|
+
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 }); }
|
|
24754
24925
|
}
|
|
24755
24926
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24756
24927
|
type: Component,
|
|
24757
|
-
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,
|
|
24928
|
+
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" }]
|
|
24758
24929
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24759
24930
|
type: Input
|
|
24760
24931
|
}], choices: [{
|
|
@@ -25013,11 +25184,11 @@ class AutocompleteComponent {
|
|
|
25013
25184
|
}
|
|
25014
25185
|
}
|
|
25015
25186
|
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 }); }
|
|
25016
|
-
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(
|
|
25187
|
+
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 }); }
|
|
25017
25188
|
}
|
|
25018
25189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25019
25190
|
type: Component,
|
|
25020
|
-
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(
|
|
25191
|
+
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"] }]
|
|
25021
25192
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25022
25193
|
type: Input
|
|
25023
25194
|
}], action: [{
|
|
@@ -25066,11 +25237,11 @@ class StarToggleComponent {
|
|
|
25066
25237
|
event.preventDefault();
|
|
25067
25238
|
}
|
|
25068
25239
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25069
|
-
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 }); }
|
|
25240
|
+
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 }); }
|
|
25070
25241
|
}
|
|
25071
25242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, decorators: [{
|
|
25072
25243
|
type: Component,
|
|
25073
|
-
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"] }]
|
|
25244
|
+
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"] }]
|
|
25074
25245
|
}], propDecorators: { toggled: [{
|
|
25075
25246
|
type: Input
|
|
25076
25247
|
}], disabled: [{
|
|
@@ -25182,11 +25353,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25182
25353
|
|
|
25183
25354
|
class NavigationButtonComponent {
|
|
25184
25355
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25185
|
-
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-
|
|
25356
|
+
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 }); }
|
|
25186
25357
|
}
|
|
25187
25358
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25188
25359
|
type: Component,
|
|
25189
|
-
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-
|
|
25360
|
+
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" }]
|
|
25190
25361
|
}], propDecorators: { label: [{
|
|
25191
25362
|
type: Input
|
|
25192
25363
|
}], icon: [{
|
|
@@ -25393,11 +25564,11 @@ class CheckboxComponent {
|
|
|
25393
25564
|
this.changed.emit(this.checked);
|
|
25394
25565
|
}
|
|
25395
25566
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25396
|
-
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
|
|
25567
|
+
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 }); }
|
|
25397
25568
|
}
|
|
25398
25569
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25399
25570
|
type: Component,
|
|
25400
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25571
|
+
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"] }]
|
|
25401
25572
|
}], propDecorators: { type: [{
|
|
25402
25573
|
type: Input
|
|
25403
25574
|
}], checked: [{
|
|
@@ -25452,6 +25623,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25452
25623
|
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"] }]
|
|
25453
25624
|
}] });
|
|
25454
25625
|
|
|
25626
|
+
class EditableLabelDirective {
|
|
25627
|
+
constructor(el, renderer) {
|
|
25628
|
+
this.el = el;
|
|
25629
|
+
this.renderer = renderer;
|
|
25630
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25631
|
+
}
|
|
25632
|
+
ngAfterViewInit() {
|
|
25633
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25634
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25635
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25636
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25637
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25638
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25639
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25640
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25641
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25642
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25643
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25644
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25645
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25646
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25647
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25648
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25649
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25650
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25651
|
+
});
|
|
25652
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25653
|
+
}
|
|
25654
|
+
}
|
|
25655
|
+
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 }); }
|
|
25656
|
+
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 }); }
|
|
25657
|
+
}
|
|
25658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25659
|
+
type: Directive,
|
|
25660
|
+
args: [{
|
|
25661
|
+
selector: '[gnUiEditableLabel]',
|
|
25662
|
+
standalone: true,
|
|
25663
|
+
}]
|
|
25664
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25665
|
+
type: Output
|
|
25666
|
+
}], gnUiEditableLabel: [{
|
|
25667
|
+
type: Input
|
|
25668
|
+
}] } });
|
|
25669
|
+
|
|
25455
25670
|
class UiInputsModule {
|
|
25456
25671
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25457
25672
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
@@ -25491,7 +25706,8 @@ class UiInputsModule {
|
|
|
25491
25706
|
MatFormFieldModule,
|
|
25492
25707
|
MatInputModule,
|
|
25493
25708
|
MatDatepickerModule,
|
|
25494
|
-
MatNativeDateModule
|
|
25709
|
+
MatNativeDateModule,
|
|
25710
|
+
EditableLabelDirective], exports: [DropdownSelectorComponent,
|
|
25495
25711
|
AutocompleteComponent,
|
|
25496
25712
|
ButtonComponent,
|
|
25497
25713
|
TextInputComponent,
|
|
@@ -25507,7 +25723,8 @@ class UiInputsModule {
|
|
|
25507
25723
|
CopyTextButtonComponent,
|
|
25508
25724
|
CheckboxComponent,
|
|
25509
25725
|
SearchInputComponent,
|
|
25510
|
-
DateRangePickerComponent
|
|
25726
|
+
DateRangePickerComponent,
|
|
25727
|
+
EditableLabelDirective] }); }
|
|
25511
25728
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25512
25729
|
TranslateModule.forChild(),
|
|
25513
25730
|
NgxDropzoneModule,
|
|
@@ -25573,6 +25790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25573
25790
|
MatInputModule,
|
|
25574
25791
|
MatDatepickerModule,
|
|
25575
25792
|
MatNativeDateModule,
|
|
25793
|
+
EditableLabelDirective,
|
|
25576
25794
|
],
|
|
25577
25795
|
exports: [
|
|
25578
25796
|
DropdownSelectorComponent,
|
|
@@ -25592,6 +25810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25592
25810
|
CheckboxComponent,
|
|
25593
25811
|
SearchInputComponent,
|
|
25594
25812
|
DateRangePickerComponent,
|
|
25813
|
+
EditableLabelDirective,
|
|
25595
25814
|
],
|
|
25596
25815
|
}]
|
|
25597
25816
|
}] });
|
|
@@ -25691,7 +25910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25691
25910
|
|
|
25692
25911
|
const DEFAULT_PARAMS = {
|
|
25693
25912
|
OFFSET: '',
|
|
25694
|
-
LIMIT: '',
|
|
25913
|
+
LIMIT: '-1',
|
|
25695
25914
|
FORMAT: 'json',
|
|
25696
25915
|
};
|
|
25697
25916
|
class RecordApiFormComponent {
|
|
@@ -25720,6 +25939,8 @@ class RecordApiFormComponent {
|
|
|
25720
25939
|
}
|
|
25721
25940
|
return outputUrl;
|
|
25722
25941
|
}));
|
|
25942
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
25943
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25723
25944
|
}
|
|
25724
25945
|
set apiLink(value) {
|
|
25725
25946
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25729,10 +25950,11 @@ class RecordApiFormComponent {
|
|
|
25729
25950
|
this.offset$.next(value);
|
|
25730
25951
|
}
|
|
25731
25952
|
setLimit(value) {
|
|
25732
|
-
|
|
25953
|
+
const newLimit = value === '' ? '-1' : value;
|
|
25954
|
+
this.limit$.next(newLimit);
|
|
25733
25955
|
}
|
|
25734
25956
|
setFormat(value) {
|
|
25735
|
-
this.format$.next(value);
|
|
25957
|
+
this.format$.next(String(value));
|
|
25736
25958
|
}
|
|
25737
25959
|
resetUrl() {
|
|
25738
25960
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25740,15 +25962,34 @@ class RecordApiFormComponent {
|
|
|
25740
25962
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25741
25963
|
}
|
|
25742
25964
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25743
|
-
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 (
|
|
25965
|
+
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 }); }
|
|
25744
25966
|
}
|
|
25745
25967
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25746
25968
|
type: Component,
|
|
25747
|
-
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 (
|
|
25969
|
+
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"] }]
|
|
25748
25970
|
}], propDecorators: { apiLink: [{
|
|
25749
25971
|
type: Input
|
|
25750
25972
|
}] } });
|
|
25751
25973
|
|
|
25974
|
+
class ImageOverlayPreviewComponent {
|
|
25975
|
+
constructor() {
|
|
25976
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
25977
|
+
}
|
|
25978
|
+
openLightbox(src) {
|
|
25979
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
25980
|
+
}
|
|
25981
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25982
|
+
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"] }] }); }
|
|
25983
|
+
}
|
|
25984
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
25985
|
+
type: Component,
|
|
25986
|
+
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" }]
|
|
25987
|
+
}], propDecorators: { imageUrl: [{
|
|
25988
|
+
type: Input
|
|
25989
|
+
}], isPlaceholderShown: [{
|
|
25990
|
+
type: Output
|
|
25991
|
+
}] } });
|
|
25992
|
+
|
|
25752
25993
|
class UiElementsModule {
|
|
25753
25994
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25754
25995
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -25770,7 +26011,9 @@ class UiElementsModule {
|
|
|
25770
26011
|
GnUiLinkifyDirective,
|
|
25771
26012
|
PaginationButtonsComponent,
|
|
25772
26013
|
MaxLinesComponent,
|
|
25773
|
-
RecordApiFormComponent
|
|
26014
|
+
RecordApiFormComponent,
|
|
26015
|
+
MarkdownParserComponent,
|
|
26016
|
+
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25774
26017
|
MatIconModule,
|
|
25775
26018
|
MatTooltipModule,
|
|
25776
26019
|
UiWidgetsModule,
|
|
@@ -25795,7 +26038,10 @@ class UiElementsModule {
|
|
|
25795
26038
|
AvatarComponent,
|
|
25796
26039
|
UserPreviewComponent,
|
|
25797
26040
|
PaginationButtonsComponent,
|
|
25798
|
-
|
|
26041
|
+
MaxLinesComponent,
|
|
26042
|
+
RecordApiFormComponent,
|
|
26043
|
+
MarkdownParserComponent,
|
|
26044
|
+
ImageOverlayPreviewComponent] }); }
|
|
25799
26045
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
25800
26046
|
MatIconModule,
|
|
25801
26047
|
MatTooltipModule,
|
|
@@ -25844,6 +26090,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25844
26090
|
PaginationButtonsComponent,
|
|
25845
26091
|
MaxLinesComponent,
|
|
25846
26092
|
RecordApiFormComponent,
|
|
26093
|
+
MarkdownParserComponent,
|
|
26094
|
+
ImageOverlayPreviewComponent,
|
|
25847
26095
|
],
|
|
25848
26096
|
exports: [
|
|
25849
26097
|
MetadataInfoComponent,
|
|
@@ -25863,148 +26111,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25863
26111
|
AvatarComponent,
|
|
25864
26112
|
UserPreviewComponent,
|
|
25865
26113
|
PaginationButtonsComponent,
|
|
26114
|
+
MaxLinesComponent,
|
|
25866
26115
|
RecordApiFormComponent,
|
|
26116
|
+
MarkdownParserComponent,
|
|
26117
|
+
ImageOverlayPreviewComponent,
|
|
25867
26118
|
],
|
|
25868
26119
|
}]
|
|
25869
26120
|
}] });
|
|
25870
26121
|
|
|
25871
|
-
class RecordTableComponent {
|
|
25872
|
-
constructor() {
|
|
25873
|
-
this.selectedRecords = [];
|
|
25874
|
-
this.records = [];
|
|
25875
|
-
this.recordClick = new EventEmitter();
|
|
25876
|
-
this.recordsSelect = new EventEmitter();
|
|
25877
|
-
this.recordsDeselect = new EventEmitter();
|
|
25878
|
-
this.sortByChange = new EventEmitter();
|
|
25879
|
-
}
|
|
25880
|
-
dateToString(date) {
|
|
25881
|
-
return date?.toLocaleDateString(undefined, {
|
|
25882
|
-
year: 'numeric',
|
|
25883
|
-
month: 'long',
|
|
25884
|
-
day: 'numeric',
|
|
25885
|
-
timeZone: 'UTC',
|
|
25886
|
-
});
|
|
25887
|
-
}
|
|
25888
|
-
getStatus(isPublishedToAll) {
|
|
25889
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
25890
|
-
}
|
|
25891
|
-
formatUserInfo(userInfo) {
|
|
25892
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
25893
|
-
if (infos && infos.length === 4) {
|
|
25894
|
-
return `${infos[2]} ${infos[1]}`;
|
|
25895
|
-
}
|
|
25896
|
-
return undefined;
|
|
25897
|
-
}
|
|
25898
|
-
getRecordFormats(record) {
|
|
25899
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
25900
|
-
return [];
|
|
25901
|
-
}
|
|
25902
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
25903
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
25904
|
-
return formats;
|
|
25905
|
-
}
|
|
25906
|
-
getBadgeColor(format) {
|
|
25907
|
-
return getBadgeColor(format);
|
|
25908
|
-
}
|
|
25909
|
-
getOrderForColumn(col) {
|
|
25910
|
-
if (!this.sortBy) {
|
|
25911
|
-
return null;
|
|
25912
|
-
}
|
|
25913
|
-
let order = null;
|
|
25914
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
25915
|
-
? this.sortBy
|
|
25916
|
-
: [this.sortBy];
|
|
25917
|
-
sortedArray.forEach((sortedCol) => {
|
|
25918
|
-
if (sortedCol[1] === col) {
|
|
25919
|
-
order = sortedCol[0];
|
|
25920
|
-
}
|
|
25921
|
-
});
|
|
25922
|
-
return order;
|
|
25923
|
-
}
|
|
25924
|
-
setSortBy(col) {
|
|
25925
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
25926
|
-
let newOrder;
|
|
25927
|
-
if (sortOrder) {
|
|
25928
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
25929
|
-
}
|
|
25930
|
-
else {
|
|
25931
|
-
newOrder = 'asc';
|
|
25932
|
-
}
|
|
25933
|
-
this.sortByChange.emit([newOrder, col]);
|
|
25934
|
-
this.sortBy = [newOrder, col];
|
|
25935
|
-
}
|
|
25936
|
-
isSortedBy(col, order) {
|
|
25937
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
25938
|
-
return sortOrder === order;
|
|
25939
|
-
}
|
|
25940
|
-
isChecked(record) {
|
|
25941
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
25942
|
-
return true;
|
|
25943
|
-
}
|
|
25944
|
-
return false;
|
|
25945
|
-
}
|
|
25946
|
-
handleRecordSelectedChange(selected, record) {
|
|
25947
|
-
if (!selected) {
|
|
25948
|
-
this.recordsDeselect.emit([record]);
|
|
25949
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
25950
|
-
}
|
|
25951
|
-
else {
|
|
25952
|
-
this.recordsSelect.emit([record]);
|
|
25953
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
25954
|
-
}
|
|
25955
|
-
}
|
|
25956
|
-
selectAll() {
|
|
25957
|
-
if (this.isAllSelected()) {
|
|
25958
|
-
this.recordsDeselect.emit(this.records);
|
|
25959
|
-
this.selectedRecords = [];
|
|
25960
|
-
}
|
|
25961
|
-
else {
|
|
25962
|
-
this.recordsSelect.emit(this.records);
|
|
25963
|
-
this.selectedRecords = this.records.map((record) => {
|
|
25964
|
-
return record.uniqueIdentifier;
|
|
25965
|
-
});
|
|
25966
|
-
}
|
|
25967
|
-
}
|
|
25968
|
-
isAllSelected() {
|
|
25969
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
25970
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
25971
|
-
if (allRecords.length === this.records.length) {
|
|
25972
|
-
return true;
|
|
25973
|
-
}
|
|
25974
|
-
}
|
|
25975
|
-
return false;
|
|
25976
|
-
}
|
|
25977
|
-
isSomeSelected() {
|
|
25978
|
-
if (this.selectedRecords.length > 0 &&
|
|
25979
|
-
this.selectedRecords.length < this.records.length) {
|
|
25980
|
-
return true;
|
|
25981
|
-
}
|
|
25982
|
-
return false;
|
|
25983
|
-
}
|
|
25984
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25985
|
-
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"] }] }); }
|
|
25986
|
-
}
|
|
25987
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
25988
|
-
type: Component,
|
|
25989
|
-
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"] }]
|
|
25990
|
-
}], propDecorators: { selectedRecords: [{
|
|
25991
|
-
type: Input
|
|
25992
|
-
}], records: [{
|
|
25993
|
-
type: Input
|
|
25994
|
-
}], totalHits: [{
|
|
25995
|
-
type: Input
|
|
25996
|
-
}], sortBy: [{
|
|
25997
|
-
type: Input
|
|
25998
|
-
}], recordClick: [{
|
|
25999
|
-
type: Output
|
|
26000
|
-
}], recordsSelect: [{
|
|
26001
|
-
type: Output
|
|
26002
|
-
}], recordsDeselect: [{
|
|
26003
|
-
type: Output
|
|
26004
|
-
}], sortByChange: [{
|
|
26005
|
-
type: Output
|
|
26006
|
-
}] } });
|
|
26007
|
-
|
|
26008
26122
|
class UiSearchModule {
|
|
26009
26123
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26010
26124
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26017,8 +26131,7 @@ class UiSearchModule {
|
|
|
26017
26131
|
ResultsHitsNumberComponent,
|
|
26018
26132
|
ResultsListItemComponent,
|
|
26019
26133
|
RecordPreviewFeedComponent,
|
|
26020
|
-
RecordPreviewRowComponent,
|
|
26021
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26134
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26022
26135
|
FacetsModule$1,
|
|
26023
26136
|
FormsModule,
|
|
26024
26137
|
ReactiveFormsModule,
|
|
@@ -26029,7 +26142,8 @@ class UiSearchModule {
|
|
|
26029
26142
|
UiElementsModule,
|
|
26030
26143
|
MatIconModule,
|
|
26031
26144
|
MatCheckboxModule,
|
|
26032
|
-
RouterLink
|
|
26145
|
+
RouterLink,
|
|
26146
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26033
26147
|
RecordPreviewCardComponent,
|
|
26034
26148
|
RecordPreviewTextComponent,
|
|
26035
26149
|
RecordPreviewTitleComponent,
|
|
@@ -26039,8 +26153,7 @@ class UiSearchModule {
|
|
|
26039
26153
|
RecordPreviewComponent,
|
|
26040
26154
|
ResultsHitsNumberComponent,
|
|
26041
26155
|
RecordPreviewFeedComponent,
|
|
26042
|
-
RecordPreviewRowComponent
|
|
26043
|
-
RecordTableComponent] }); }
|
|
26156
|
+
RecordPreviewRowComponent] }); }
|
|
26044
26157
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26045
26158
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26046
26159
|
], imports: [CommonModule,
|
|
@@ -26055,7 +26168,8 @@ class UiSearchModule {
|
|
|
26055
26168
|
UiInputsModule,
|
|
26056
26169
|
UiElementsModule,
|
|
26057
26170
|
MatIconModule,
|
|
26058
|
-
MatCheckboxModule,
|
|
26171
|
+
MatCheckboxModule,
|
|
26172
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26059
26173
|
}
|
|
26060
26174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26061
26175
|
type: NgModule,
|
|
@@ -26072,7 +26186,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26072
26186
|
ResultsListItemComponent,
|
|
26073
26187
|
RecordPreviewFeedComponent,
|
|
26074
26188
|
RecordPreviewRowComponent,
|
|
26075
|
-
RecordTableComponent,
|
|
26076
26189
|
],
|
|
26077
26190
|
imports: [
|
|
26078
26191
|
CommonModule,
|
|
@@ -26089,6 +26202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26089
26202
|
MatIconModule,
|
|
26090
26203
|
MatCheckboxModule,
|
|
26091
26204
|
RouterLink,
|
|
26205
|
+
InteractiveTableComponent,
|
|
26092
26206
|
],
|
|
26093
26207
|
exports: [
|
|
26094
26208
|
RecordPreviewListComponent,
|
|
@@ -26102,7 +26216,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26102
26216
|
ResultsHitsNumberComponent,
|
|
26103
26217
|
RecordPreviewFeedComponent,
|
|
26104
26218
|
RecordPreviewRowComponent,
|
|
26105
|
-
RecordTableComponent,
|
|
26106
26219
|
],
|
|
26107
26220
|
providers: [
|
|
26108
26221
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26661,6 +26774,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26661
26774
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26662
26775
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26663
26776
|
|
|
26777
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26778
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26779
|
+
|
|
26664
26780
|
class SearchFacade {
|
|
26665
26781
|
constructor(store, filterGeometry) {
|
|
26666
26782
|
this.store = store;
|
|
@@ -26765,6 +26881,7 @@ class SearchFacade {
|
|
|
26765
26881
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26766
26882
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26767
26883
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
26884
|
+
return this;
|
|
26768
26885
|
}
|
|
26769
26886
|
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 }); }
|
|
26770
26887
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27149,8 +27266,11 @@ class FuzzySearchComponent {
|
|
|
27149
27266
|
this.searchService.updateFilters({ any });
|
|
27150
27267
|
}
|
|
27151
27268
|
}
|
|
27152
|
-
handleInputCleared() {
|
|
27153
|
-
this.
|
|
27269
|
+
async handleInputCleared() {
|
|
27270
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27271
|
+
if (currentSearchFilters.any) {
|
|
27272
|
+
this.searchService.updateFilters({ any: '' });
|
|
27273
|
+
}
|
|
27154
27274
|
}
|
|
27155
27275
|
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 }); }
|
|
27156
27276
|
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 }); }
|
|
@@ -27230,6 +27350,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27230
27350
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27231
27351
|
}] }]; } });
|
|
27232
27352
|
|
|
27353
|
+
// expects the replacement key ${uuid}
|
|
27354
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27355
|
+
|
|
27233
27356
|
class FavoriteStarComponent {
|
|
27234
27357
|
set record(value) {
|
|
27235
27358
|
this.record_ = value;
|
|
@@ -27250,6 +27373,7 @@ class FavoriteStarComponent {
|
|
|
27250
27373
|
this.changeDetector = changeDetector;
|
|
27251
27374
|
this.authService = authService;
|
|
27252
27375
|
this.translateService = translateService;
|
|
27376
|
+
this.displayCount = true;
|
|
27253
27377
|
this.isFavorite$ = this.favoritesService.myFavoritesUuid$.pipe(map$1((favorites) => favorites.indexOf(this.record.uniqueIdentifier) > -1));
|
|
27254
27378
|
this.isAnonymous$ = this.platformService.isAnonymous();
|
|
27255
27379
|
this.loading = false;
|
|
@@ -27312,12 +27436,14 @@ class FavoriteStarComponent {
|
|
|
27312
27436
|
});
|
|
27313
27437
|
}
|
|
27314
27438
|
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 }); }
|
|
27315
|
-
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
|
|
27439
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row 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 }); }
|
|
27316
27440
|
}
|
|
27317
27441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
27318
27442
|
type: Component,
|
|
27319
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <span
|
|
27320
|
-
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: {
|
|
27443
|
+
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" }]
|
|
27444
|
+
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
|
|
27445
|
+
type: Input
|
|
27446
|
+
}], record: [{
|
|
27321
27447
|
type: Input
|
|
27322
27448
|
}], starToggleRef: [{
|
|
27323
27449
|
type: ViewChild,
|
|
@@ -27360,7 +27486,7 @@ class ResultsListContainerComponent {
|
|
|
27360
27486
|
return this.recordUrlTemplate.replace('${uuid}', metadata.uniqueIdentifier);
|
|
27361
27487
|
}
|
|
27362
27488
|
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 }); }
|
|
27363
|
-
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" }] }); }
|
|
27489
|
+
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" }] }); }
|
|
27364
27490
|
}
|
|
27365
27491
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
|
|
27366
27492
|
type: Component,
|
|
@@ -27488,9 +27614,11 @@ class SearchEffects {
|
|
|
27488
27614
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27489
27615
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27490
27616
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27491
|
-
return of([state, favorites,
|
|
27617
|
+
return of([state, favorites, undefined]);
|
|
27492
27618
|
}
|
|
27493
27619
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27620
|
+
if (!geom)
|
|
27621
|
+
return;
|
|
27494
27622
|
try {
|
|
27495
27623
|
const trace = valid$1(geom, true);
|
|
27496
27624
|
if (trace?.length > 0) {
|
|
@@ -27502,7 +27630,7 @@ class SearchEffects {
|
|
|
27502
27630
|
throw new Error();
|
|
27503
27631
|
}
|
|
27504
27632
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27505
|
-
return of([state, favorites,
|
|
27633
|
+
return of([state, favorites, undefined]);
|
|
27506
27634
|
}));
|
|
27507
27635
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27508
27636
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -27939,10 +28067,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27939
28067
|
type: Input
|
|
27940
28068
|
}] } });
|
|
27941
28069
|
|
|
27942
|
-
// this geometry will be used to filter & boost results accordingly
|
|
27943
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
27944
|
-
// expects the replacement key ${uuid}
|
|
27945
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27946
28070
|
class FeatureSearchModule {
|
|
27947
28071
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27948
28072
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28041,6 +28165,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28041
28165
|
}]
|
|
28042
28166
|
}] });
|
|
28043
28167
|
|
|
28168
|
+
class ResultsTableComponent {
|
|
28169
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28170
|
+
this.searchFacade = searchFacade;
|
|
28171
|
+
this.searchService = searchService;
|
|
28172
|
+
this.selectionService = selectionService;
|
|
28173
|
+
this.recordClick = new EventEmitter();
|
|
28174
|
+
this.records$ = this.searchFacade.results$;
|
|
28175
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28176
|
+
}
|
|
28177
|
+
dateToString(date) {
|
|
28178
|
+
return date?.toLocaleDateString(undefined, {
|
|
28179
|
+
year: 'numeric',
|
|
28180
|
+
month: 'long',
|
|
28181
|
+
day: 'numeric',
|
|
28182
|
+
timeZone: 'UTC',
|
|
28183
|
+
});
|
|
28184
|
+
}
|
|
28185
|
+
getStatus(isPublishedToAll) {
|
|
28186
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28187
|
+
}
|
|
28188
|
+
getRecordFormats(record) {
|
|
28189
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28190
|
+
return [];
|
|
28191
|
+
}
|
|
28192
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28193
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28194
|
+
return formats;
|
|
28195
|
+
}
|
|
28196
|
+
formatUserInfo(userInfo) {
|
|
28197
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28198
|
+
if (infos && infos.length === 4) {
|
|
28199
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28200
|
+
}
|
|
28201
|
+
return undefined;
|
|
28202
|
+
}
|
|
28203
|
+
getBadgeColor(format) {
|
|
28204
|
+
return getBadgeColor(format);
|
|
28205
|
+
}
|
|
28206
|
+
handleRecordClick(item) {
|
|
28207
|
+
this.recordClick.emit(item);
|
|
28208
|
+
}
|
|
28209
|
+
setSortBy(col, order) {
|
|
28210
|
+
this.searchService.setSortBy([order, col]);
|
|
28211
|
+
}
|
|
28212
|
+
isSortedBy(col) {
|
|
28213
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28214
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28215
|
+
? sortOrder
|
|
28216
|
+
: [sortOrder];
|
|
28217
|
+
for (const sort of sortArray) {
|
|
28218
|
+
if (sort[1] === col) {
|
|
28219
|
+
return sort[0];
|
|
28220
|
+
}
|
|
28221
|
+
}
|
|
28222
|
+
return null;
|
|
28223
|
+
}));
|
|
28224
|
+
}
|
|
28225
|
+
isChecked(record) {
|
|
28226
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28227
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28228
|
+
}));
|
|
28229
|
+
}
|
|
28230
|
+
handleRecordSelectedChange(selected, record) {
|
|
28231
|
+
if (!selected) {
|
|
28232
|
+
this.selectionService.deselectRecords([record]);
|
|
28233
|
+
}
|
|
28234
|
+
else {
|
|
28235
|
+
this.selectionService.selectRecords([record]);
|
|
28236
|
+
}
|
|
28237
|
+
}
|
|
28238
|
+
async toggleSelectAll() {
|
|
28239
|
+
const records = await firstValueFrom(this.records$);
|
|
28240
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28241
|
+
this.selectionService.deselectRecords(records);
|
|
28242
|
+
}
|
|
28243
|
+
else {
|
|
28244
|
+
this.selectionService.selectRecords(records);
|
|
28245
|
+
}
|
|
28246
|
+
}
|
|
28247
|
+
isAllSelected() {
|
|
28248
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28249
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28250
|
+
}));
|
|
28251
|
+
}
|
|
28252
|
+
isSomeSelected() {
|
|
28253
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28254
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28255
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28256
|
+
return !allSelected && someSelected;
|
|
28257
|
+
}));
|
|
28258
|
+
}
|
|
28259
|
+
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 }); }
|
|
28260
|
+
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"] }] }); }
|
|
28261
|
+
}
|
|
28262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28263
|
+
type: Component,
|
|
28264
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28265
|
+
CommonModule,
|
|
28266
|
+
UiInputsModule,
|
|
28267
|
+
InteractiveTableComponent,
|
|
28268
|
+
InteractiveTableColumnComponent,
|
|
28269
|
+
MatIconModule,
|
|
28270
|
+
TranslateModule,
|
|
28271
|
+
], 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" }]
|
|
28272
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28273
|
+
type: Output
|
|
28274
|
+
}] } });
|
|
28275
|
+
|
|
28044
28276
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28045
28277
|
get mapLinks() {
|
|
28046
28278
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28075,7 +28307,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
|
28075
28307
|
return getLinkLabel(link);
|
|
28076
28308
|
}
|
|
28077
28309
|
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 }); }
|
|
28078
|
-
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 }); }
|
|
28310
|
+
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 }); }
|
|
28079
28311
|
}
|
|
28080
28312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
|
|
28081
28313
|
type: Component,
|
|
@@ -28119,6 +28351,208 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28119
28351
|
], 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"] }]
|
|
28120
28352
|
}], ctorParameters: function () { return [{ type: SearchFacade }]; } });
|
|
28121
28353
|
|
|
28354
|
+
class AddLayerFromWmsComponent {
|
|
28355
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28356
|
+
this.mapFacade = mapFacade;
|
|
28357
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28358
|
+
this.wmsUrl = '';
|
|
28359
|
+
this.loading = false;
|
|
28360
|
+
this.layers = [];
|
|
28361
|
+
this.wmsEndpoint = null;
|
|
28362
|
+
this.urlChange = new Subject();
|
|
28363
|
+
this.errorMessage = null;
|
|
28364
|
+
}
|
|
28365
|
+
ngOnInit() {
|
|
28366
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28367
|
+
}
|
|
28368
|
+
async loadLayers() {
|
|
28369
|
+
this.errorMessage = null;
|
|
28370
|
+
try {
|
|
28371
|
+
this.loading = true;
|
|
28372
|
+
if (this.wmsUrl.trim() === '') {
|
|
28373
|
+
this.layers = [];
|
|
28374
|
+
return;
|
|
28375
|
+
}
|
|
28376
|
+
this.wmsEndpoint = await new WmsEndpoint(this.wmsUrl).isReady();
|
|
28377
|
+
this.layers = this.wmsEndpoint.getLayers();
|
|
28378
|
+
}
|
|
28379
|
+
catch (error) {
|
|
28380
|
+
const err = error;
|
|
28381
|
+
this.layers = [];
|
|
28382
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28383
|
+
}
|
|
28384
|
+
finally {
|
|
28385
|
+
this.loading = false;
|
|
28386
|
+
this.changeDetectorRef.markForCheck();
|
|
28387
|
+
}
|
|
28388
|
+
}
|
|
28389
|
+
addLayer(layer) {
|
|
28390
|
+
const layerToAdd = {
|
|
28391
|
+
name: layer.name,
|
|
28392
|
+
url: this.wmsUrl.toString(),
|
|
28393
|
+
type: MapContextLayerTypeEnum.WMS,
|
|
28394
|
+
};
|
|
28395
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28396
|
+
}
|
|
28397
|
+
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 }); }
|
|
28398
|
+
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" }] }); }
|
|
28399
|
+
}
|
|
28400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
|
|
28401
|
+
type: Component,
|
|
28402
|
+
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" }]
|
|
28403
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28404
|
+
|
|
28405
|
+
const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
|
|
28406
|
+
class AddLayerFromFileComponent {
|
|
28407
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28408
|
+
this.mapFacade = mapFacade;
|
|
28409
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28410
|
+
this.errorMessage = null;
|
|
28411
|
+
this.successMessage = null;
|
|
28412
|
+
this.loading = false;
|
|
28413
|
+
this.acceptedMimeType = ['.geojson'];
|
|
28414
|
+
this.maxFileSize = 5000000;
|
|
28415
|
+
}
|
|
28416
|
+
async handleFileChange(file) {
|
|
28417
|
+
if (!file) {
|
|
28418
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28419
|
+
return;
|
|
28420
|
+
}
|
|
28421
|
+
if (file.size > this.maxFileSize) {
|
|
28422
|
+
this.displayMessage('File size exceeds the limit of 5MB', 'error');
|
|
28423
|
+
return;
|
|
28424
|
+
}
|
|
28425
|
+
await this.addLayer(file);
|
|
28426
|
+
}
|
|
28427
|
+
async addLayer(file) {
|
|
28428
|
+
this.errorMessage = null;
|
|
28429
|
+
this.loading = true;
|
|
28430
|
+
try {
|
|
28431
|
+
if (!this.isFileFormatValid(file)) {
|
|
28432
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28433
|
+
return;
|
|
28434
|
+
}
|
|
28435
|
+
const fileExtension = this.getFileExtension(file);
|
|
28436
|
+
switch (fileExtension) {
|
|
28437
|
+
case 'geojson':
|
|
28438
|
+
await this.addGeoJsonLayer(file);
|
|
28439
|
+
break;
|
|
28440
|
+
default:
|
|
28441
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28442
|
+
break;
|
|
28443
|
+
}
|
|
28444
|
+
}
|
|
28445
|
+
catch (error) {
|
|
28446
|
+
const err = error;
|
|
28447
|
+
this.displayMessage('Error loading file: ' + err.message, 'error');
|
|
28448
|
+
}
|
|
28449
|
+
finally {
|
|
28450
|
+
this.loading = false;
|
|
28451
|
+
}
|
|
28452
|
+
}
|
|
28453
|
+
addGeoJsonLayer(file) {
|
|
28454
|
+
return new Promise((resolve, reject) => {
|
|
28455
|
+
try {
|
|
28456
|
+
const reader = new FileReader();
|
|
28457
|
+
reader.onload = () => {
|
|
28458
|
+
const result = reader.result;
|
|
28459
|
+
const title = file.name.split('.').slice(0, -1).join('.');
|
|
28460
|
+
const layerToAdd = {
|
|
28461
|
+
type: 'geojson',
|
|
28462
|
+
data: result,
|
|
28463
|
+
};
|
|
28464
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: title });
|
|
28465
|
+
this.displayMessage('File successfully added to map', 'success');
|
|
28466
|
+
resolve();
|
|
28467
|
+
};
|
|
28468
|
+
reader.onerror = reject;
|
|
28469
|
+
reader.readAsText(file);
|
|
28470
|
+
}
|
|
28471
|
+
catch (error) {
|
|
28472
|
+
reject(error);
|
|
28473
|
+
}
|
|
28474
|
+
});
|
|
28475
|
+
}
|
|
28476
|
+
isFileFormatValid(file) {
|
|
28477
|
+
const fileExtension = this.getFileExtension(file);
|
|
28478
|
+
return this.acceptedMimeType.includes(`.${fileExtension}`);
|
|
28479
|
+
}
|
|
28480
|
+
getFileExtension(file) {
|
|
28481
|
+
return file.name.split('.').pop();
|
|
28482
|
+
}
|
|
28483
|
+
displayMessage(message, type) {
|
|
28484
|
+
if (type === 'success') {
|
|
28485
|
+
this.successMessage = message;
|
|
28486
|
+
}
|
|
28487
|
+
else if (type === 'error') {
|
|
28488
|
+
this.errorMessage = message;
|
|
28489
|
+
}
|
|
28490
|
+
setTimeout(() => {
|
|
28491
|
+
this.successMessage = null;
|
|
28492
|
+
this.errorMessage = null;
|
|
28493
|
+
this.changeDetectorRef.detectChanges();
|
|
28494
|
+
}, 5000);
|
|
28495
|
+
}
|
|
28496
|
+
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 }); }
|
|
28497
|
+
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" }] }); }
|
|
28498
|
+
}
|
|
28499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
|
|
28500
|
+
type: Component,
|
|
28501
|
+
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" }]
|
|
28502
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28503
|
+
|
|
28504
|
+
class AddLayerFromWfsComponent {
|
|
28505
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28506
|
+
this.mapFacade = mapFacade;
|
|
28507
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28508
|
+
this.wfsUrl = '';
|
|
28509
|
+
this.loading = false;
|
|
28510
|
+
this.layers = [];
|
|
28511
|
+
this.wfsEndpoint = null;
|
|
28512
|
+
this.urlChange = new Subject();
|
|
28513
|
+
this.errorMessage = null;
|
|
28514
|
+
}
|
|
28515
|
+
ngOnInit() {
|
|
28516
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28517
|
+
}
|
|
28518
|
+
async loadLayers() {
|
|
28519
|
+
this.errorMessage = null;
|
|
28520
|
+
try {
|
|
28521
|
+
this.loading = true;
|
|
28522
|
+
if (this.wfsUrl.trim() === '') {
|
|
28523
|
+
this.layers = [];
|
|
28524
|
+
return;
|
|
28525
|
+
}
|
|
28526
|
+
this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
|
|
28527
|
+
this.layers = this.wfsEndpoint.getFeatureTypes();
|
|
28528
|
+
console.log(this.layers);
|
|
28529
|
+
}
|
|
28530
|
+
catch (error) {
|
|
28531
|
+
const err = error;
|
|
28532
|
+
this.layers = [];
|
|
28533
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28534
|
+
}
|
|
28535
|
+
finally {
|
|
28536
|
+
this.loading = false;
|
|
28537
|
+
this.changeDetectorRef.markForCheck();
|
|
28538
|
+
}
|
|
28539
|
+
}
|
|
28540
|
+
addLayer(layer) {
|
|
28541
|
+
const layerToAdd = {
|
|
28542
|
+
name: layer.name,
|
|
28543
|
+
url: this.wfsUrl.toString(),
|
|
28544
|
+
type: MapContextLayerTypeEnum.WFS,
|
|
28545
|
+
};
|
|
28546
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28547
|
+
}
|
|
28548
|
+
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 }); }
|
|
28549
|
+
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" }] }); }
|
|
28550
|
+
}
|
|
28551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
28552
|
+
type: Component,
|
|
28553
|
+
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" }]
|
|
28554
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28555
|
+
|
|
28122
28556
|
class LayersPanelComponent {
|
|
28123
28557
|
constructor(mapFacade) {
|
|
28124
28558
|
this.mapFacade = mapFacade;
|
|
@@ -28128,11 +28562,11 @@ class LayersPanelComponent {
|
|
|
28128
28562
|
this.mapFacade.removeLayer(index);
|
|
28129
28563
|
}
|
|
28130
28564
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28131
|
-
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
|
|
28565
|
+
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 }); }
|
|
28132
28566
|
}
|
|
28133
28567
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
28134
28568
|
type: Component,
|
|
28135
|
-
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
|
|
28569
|
+
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" }]
|
|
28136
28570
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28137
28571
|
|
|
28138
28572
|
class MapEffects {
|
|
@@ -28165,6 +28599,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28165
28599
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28166
28600
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28167
28601
|
|
|
28602
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28603
|
+
class GeocodingService {
|
|
28604
|
+
constructor(provider) {
|
|
28605
|
+
this.provider = provider;
|
|
28606
|
+
}
|
|
28607
|
+
query(text) {
|
|
28608
|
+
let queryObservable;
|
|
28609
|
+
switch (this.provider[0]) {
|
|
28610
|
+
case 'geoadmin':
|
|
28611
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28612
|
+
break;
|
|
28613
|
+
case 'geonames':
|
|
28614
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28615
|
+
break;
|
|
28616
|
+
case 'data-gouv-fr':
|
|
28617
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28618
|
+
break;
|
|
28619
|
+
default:
|
|
28620
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28621
|
+
}
|
|
28622
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28623
|
+
}
|
|
28624
|
+
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 }); }
|
|
28625
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28626
|
+
}
|
|
28627
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28628
|
+
type: Injectable,
|
|
28629
|
+
args: [{
|
|
28630
|
+
providedIn: 'root',
|
|
28631
|
+
}]
|
|
28632
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28633
|
+
type: Inject,
|
|
28634
|
+
args: [GEOCODING_PROVIDER]
|
|
28635
|
+
}] }]; } });
|
|
28636
|
+
|
|
28637
|
+
class GeocodingComponent {
|
|
28638
|
+
constructor(mapManager, geocodingService) {
|
|
28639
|
+
this.mapManager = mapManager;
|
|
28640
|
+
this.geocodingService = geocodingService;
|
|
28641
|
+
this.searchText = '';
|
|
28642
|
+
this.results = [];
|
|
28643
|
+
this.searchTextChanged = new Subject();
|
|
28644
|
+
this.destroy$ = new Subject();
|
|
28645
|
+
this.errorMessage = null;
|
|
28646
|
+
this.searchTextChanged
|
|
28647
|
+
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28648
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28649
|
+
this.errorMessage =
|
|
28650
|
+
'An error occurred while searching. Please try again.';
|
|
28651
|
+
console.error(error);
|
|
28652
|
+
return [];
|
|
28653
|
+
}));
|
|
28654
|
+
}), takeUntil(this.destroy$))
|
|
28655
|
+
.subscribe((results) => {
|
|
28656
|
+
this.results = results;
|
|
28657
|
+
});
|
|
28658
|
+
}
|
|
28659
|
+
ngOnDestroy() {
|
|
28660
|
+
this.destroy$.next();
|
|
28661
|
+
this.destroy$.complete();
|
|
28662
|
+
}
|
|
28663
|
+
onSearchChange(searchText) {
|
|
28664
|
+
if (!searchText) {
|
|
28665
|
+
this.clearSearch();
|
|
28666
|
+
return;
|
|
28667
|
+
}
|
|
28668
|
+
else {
|
|
28669
|
+
this.searchTextChanged.next(searchText);
|
|
28670
|
+
}
|
|
28671
|
+
}
|
|
28672
|
+
clearSearch() {
|
|
28673
|
+
this.searchText = '';
|
|
28674
|
+
this.results = [];
|
|
28675
|
+
this.errorMessage = null;
|
|
28676
|
+
}
|
|
28677
|
+
zoomToLocation(result) {
|
|
28678
|
+
const map = this.mapManager.map;
|
|
28679
|
+
const view = map.getView();
|
|
28680
|
+
const geometry = result.geom;
|
|
28681
|
+
if (geometry.type === 'Point') {
|
|
28682
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28683
|
+
}
|
|
28684
|
+
else if (geometry.type === 'Polygon') {
|
|
28685
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28686
|
+
}
|
|
28687
|
+
else {
|
|
28688
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28689
|
+
}
|
|
28690
|
+
}
|
|
28691
|
+
zoomToPoint(pointCoords, view) {
|
|
28692
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28693
|
+
view.setCenter(transformedCoords);
|
|
28694
|
+
view.setZoom(12);
|
|
28695
|
+
}
|
|
28696
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28697
|
+
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28698
|
+
const polygon = new Polygon([transformedCoords]);
|
|
28699
|
+
view.fit(polygon, {
|
|
28700
|
+
duration: 100,
|
|
28701
|
+
maxZoom: 12,
|
|
28702
|
+
});
|
|
28703
|
+
}
|
|
28704
|
+
onEnterPress() {
|
|
28705
|
+
if (this.results && this.results.length > 0) {
|
|
28706
|
+
this.zoomToLocation(this.results[0]);
|
|
28707
|
+
}
|
|
28708
|
+
}
|
|
28709
|
+
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 }); }
|
|
28710
|
+
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" }] }); }
|
|
28711
|
+
}
|
|
28712
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28713
|
+
type: Component,
|
|
28714
|
+
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" }]
|
|
28715
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28716
|
+
|
|
28168
28717
|
class FeatureMapModule {
|
|
28169
28718
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28170
28719
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
|
|
@@ -28172,7 +28721,11 @@ class FeatureMapModule {
|
|
|
28172
28721
|
LayersPanelComponent,
|
|
28173
28722
|
AddLayerFromCatalogComponent,
|
|
28174
28723
|
MapContainerComponent,
|
|
28175
|
-
AddLayerRecordPreviewComponent
|
|
28724
|
+
AddLayerRecordPreviewComponent,
|
|
28725
|
+
AddLayerFromWmsComponent,
|
|
28726
|
+
AddLayerFromFileComponent,
|
|
28727
|
+
AddLayerFromWfsComponent,
|
|
28728
|
+
GeocodingComponent], imports: [CommonModule,
|
|
28176
28729
|
UiMapModule,
|
|
28177
28730
|
UiLayoutModule,
|
|
28178
28731
|
MatIconModule,
|
|
@@ -28183,13 +28736,18 @@ class FeatureMapModule {
|
|
|
28183
28736
|
MapInstanceDirective,
|
|
28184
28737
|
LayersPanelComponent,
|
|
28185
28738
|
AddLayerFromCatalogComponent,
|
|
28186
|
-
MapContainerComponent
|
|
28739
|
+
MapContainerComponent,
|
|
28740
|
+
GeocodingComponent] }); }
|
|
28187
28741
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
|
|
28188
28742
|
{
|
|
28189
28743
|
provide: FEATURE_MAP_OPTIONS,
|
|
28190
28744
|
useValue: defaultMapOptions,
|
|
28191
28745
|
},
|
|
28192
28746
|
MapFacade,
|
|
28747
|
+
{
|
|
28748
|
+
provide: GEOCODING_PROVIDER,
|
|
28749
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28750
|
+
},
|
|
28193
28751
|
], imports: [CommonModule,
|
|
28194
28752
|
UiMapModule,
|
|
28195
28753
|
UiLayoutModule,
|
|
@@ -28212,6 +28770,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28212
28770
|
AddLayerFromCatalogComponent,
|
|
28213
28771
|
MapContainerComponent,
|
|
28214
28772
|
AddLayerRecordPreviewComponent,
|
|
28773
|
+
AddLayerFromWmsComponent,
|
|
28774
|
+
AddLayerFromFileComponent,
|
|
28775
|
+
AddLayerFromWfsComponent,
|
|
28776
|
+
GeocodingComponent,
|
|
28215
28777
|
],
|
|
28216
28778
|
exports: [
|
|
28217
28779
|
MapContextComponent,
|
|
@@ -28219,6 +28781,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28219
28781
|
LayersPanelComponent,
|
|
28220
28782
|
AddLayerFromCatalogComponent,
|
|
28221
28783
|
MapContainerComponent,
|
|
28784
|
+
GeocodingComponent,
|
|
28222
28785
|
],
|
|
28223
28786
|
imports: [
|
|
28224
28787
|
CommonModule,
|
|
@@ -28239,6 +28802,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28239
28802
|
useValue: defaultMapOptions,
|
|
28240
28803
|
},
|
|
28241
28804
|
MapFacade,
|
|
28805
|
+
{
|
|
28806
|
+
provide: GEOCODING_PROVIDER,
|
|
28807
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28808
|
+
},
|
|
28242
28809
|
],
|
|
28243
28810
|
}]
|
|
28244
28811
|
}] });
|
|
@@ -28333,7 +28900,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28333
28900
|
...state,
|
|
28334
28901
|
chartConfig,
|
|
28335
28902
|
})), on(close, (state) => {
|
|
28336
|
-
// eslint-disable-next-line
|
|
28903
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28337
28904
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28338
28905
|
return stateWithoutMd;
|
|
28339
28906
|
}));
|
|
@@ -29600,15 +30167,16 @@ class DataService {
|
|
|
29600
30167
|
// Pour DL toutes les données
|
|
29601
30168
|
return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
|
|
29602
30169
|
...wfsLink,
|
|
30170
|
+
type: 'download',
|
|
29603
30171
|
url: new URL(urls[format]),
|
|
29604
|
-
mimeType: getMimeTypeForFormat(
|
|
30172
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29605
30173
|
}))));
|
|
29606
30174
|
}
|
|
29607
30175
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
29608
30176
|
return ['json', 'geojson'].map((format) => ({
|
|
29609
30177
|
...esriRestLink,
|
|
29610
30178
|
url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
|
|
29611
|
-
mimeType: getMimeTypeForFormat(
|
|
30179
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29612
30180
|
}));
|
|
29613
30181
|
}
|
|
29614
30182
|
readAsGeoJson(link) {
|
|
@@ -30002,12 +30570,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30002
30570
|
}] } });
|
|
30003
30571
|
|
|
30004
30572
|
class MapViewComponent {
|
|
30005
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30573
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30006
30574
|
this.mdViewFacade = mdViewFacade;
|
|
30007
30575
|
this.mapManager = mapManager;
|
|
30008
30576
|
this.mapUtils = mapUtils;
|
|
30009
30577
|
this.dataService = dataService;
|
|
30010
|
-
this.proxy = proxy;
|
|
30011
30578
|
this.featureInfo = featureInfo;
|
|
30012
30579
|
this.changeRef = changeRef;
|
|
30013
30580
|
this.styleService = styleService;
|
|
@@ -30042,7 +30609,7 @@ class MapViewComponent {
|
|
|
30042
30609
|
return of([]);
|
|
30043
30610
|
}), finalize(() => (this.loading = false)));
|
|
30044
30611
|
}));
|
|
30045
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30612
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30046
30613
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30047
30614
|
return of(undefined);
|
|
30048
30615
|
}), map$1((extent) => ({
|
|
@@ -30050,7 +30617,18 @@ class MapViewComponent {
|
|
|
30050
30617
|
view: {
|
|
30051
30618
|
extent,
|
|
30052
30619
|
},
|
|
30053
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30620
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30621
|
+
if (context.view.extent)
|
|
30622
|
+
return context;
|
|
30623
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30624
|
+
return {
|
|
30625
|
+
...context,
|
|
30626
|
+
view: {
|
|
30627
|
+
...context.view,
|
|
30628
|
+
extent,
|
|
30629
|
+
},
|
|
30630
|
+
};
|
|
30631
|
+
}));
|
|
30054
30632
|
}
|
|
30055
30633
|
ngOnDestroy() {
|
|
30056
30634
|
this.subscription.unsubscribe();
|
|
@@ -30103,13 +30681,13 @@ class MapViewComponent {
|
|
|
30103
30681
|
selectLinkToDisplay(link) {
|
|
30104
30682
|
this.selectedLinkIndex$.next(link);
|
|
30105
30683
|
}
|
|
30106
|
-
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:
|
|
30684
|
+
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 }); }
|
|
30107
30685
|
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 }); }
|
|
30108
30686
|
}
|
|
30109
30687
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30110
30688
|
type: Component,
|
|
30111
30689
|
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" }]
|
|
30112
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30690
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30113
30691
|
|
|
30114
30692
|
class DataViewComponent {
|
|
30115
30693
|
constructor(mdViewFacade) {
|
|
@@ -30192,7 +30770,7 @@ class OrganisationPreviewComponent {
|
|
|
30192
30770
|
this.clickedOrganisation.emit(this.organisation);
|
|
30193
30771
|
}
|
|
30194
30772
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30195
|
-
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 }); }
|
|
30773
|
+
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 }); }
|
|
30196
30774
|
}
|
|
30197
30775
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
|
|
30198
30776
|
type: Component,
|
|
@@ -30261,7 +30839,7 @@ class LanguageSwitcherComponent {
|
|
|
30261
30839
|
ngOnInit() {
|
|
30262
30840
|
const languages = this.languagePlaceholder || DEFAULT_LANGUAGES;
|
|
30263
30841
|
this.languageList = languages.map((language) => ({
|
|
30264
|
-
label:
|
|
30842
|
+
label: `${language}`.toUpperCase(),
|
|
30265
30843
|
value: language,
|
|
30266
30844
|
}));
|
|
30267
30845
|
}
|
|
@@ -30276,11 +30854,11 @@ class LanguageSwitcherComponent {
|
|
|
30276
30854
|
this.translate.use(value);
|
|
30277
30855
|
}
|
|
30278
30856
|
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 }); }
|
|
30279
|
-
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"] }] }); }
|
|
30857
|
+
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"] }] }); }
|
|
30280
30858
|
}
|
|
30281
30859
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30282
30860
|
type: Component,
|
|
30283
|
-
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" }]
|
|
30861
|
+
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" }]
|
|
30284
30862
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30285
30863
|
type: Optional
|
|
30286
30864
|
}, {
|
|
@@ -30422,20 +31000,8 @@ class OrganisationsComponent {
|
|
|
30422
31000
|
filterOrganisations(organisations, filterBy) {
|
|
30423
31001
|
if (!filterBy)
|
|
30424
31002
|
return organisations;
|
|
30425
|
-
const
|
|
30426
|
-
|
|
30427
|
-
.replace(/\s(?=.)/g, '.*') //replace whitespaces by "AND" separator
|
|
30428
|
-
.replace(/\s/g, ''), //remove potential whitespaces left
|
|
30429
|
-
'i');
|
|
30430
|
-
return [...organisations].filter((org) => {
|
|
30431
|
-
return this.normalizeString(org.name).match(filterRegex);
|
|
30432
|
-
});
|
|
30433
|
-
}
|
|
30434
|
-
normalizeString(str) {
|
|
30435
|
-
return str
|
|
30436
|
-
.normalize('NFD')
|
|
30437
|
-
.replace(/[\u0300-\u036f]/g, '')
|
|
30438
|
-
.toLowerCase();
|
|
31003
|
+
const filter = createFuzzyFilter(filterBy);
|
|
31004
|
+
return organisations.filter((org) => filter(org.name));
|
|
30439
31005
|
}
|
|
30440
31006
|
sortOrganisations(organisations, sortBy) {
|
|
30441
31007
|
let order;
|
|
@@ -30573,13 +31139,6 @@ class MyOrgService {
|
|
|
30573
31139
|
constructor(platformService, orgService) {
|
|
30574
31140
|
this.platformService = platformService;
|
|
30575
31141
|
this.orgService = orgService;
|
|
30576
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
30577
|
-
orgName: '',
|
|
30578
|
-
logoUrl: '',
|
|
30579
|
-
recordCount: 0,
|
|
30580
|
-
userCount: 0,
|
|
30581
|
-
userList: [],
|
|
30582
|
-
});
|
|
30583
31142
|
this.myOrgData$ = combineLatest([
|
|
30584
31143
|
this.platformService.getMe(),
|
|
30585
31144
|
this.platformService.getUsers(),
|
|
@@ -30598,7 +31157,7 @@ class MyOrgService {
|
|
|
30598
31157
|
userList,
|
|
30599
31158
|
userCount,
|
|
30600
31159
|
};
|
|
30601
|
-
}));
|
|
31160
|
+
}), shareReplay(1));
|
|
30602
31161
|
}
|
|
30603
31162
|
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 }); }
|
|
30604
31163
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31291,11 +31850,11 @@ class RecordFormComponent {
|
|
|
31291
31850
|
return field.config.model;
|
|
31292
31851
|
}
|
|
31293
31852
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31294
|
-
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 }); }
|
|
31853
|
+
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 }); }
|
|
31295
31854
|
}
|
|
31296
31855
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31297
31856
|
type: Component,
|
|
31298
|
-
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" }]
|
|
31857
|
+
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" }]
|
|
31299
31858
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31300
31859
|
|
|
31301
31860
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -31663,5 +32222,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31663
32222
|
* Generated bundle index. Do not edit.
|
|
31664
32223
|
*/
|
|
31665
32224
|
|
|
31666
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AutocompleteComponent, AvatarComponent, 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_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_RESOURCES_VALUES, EditorService, 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, 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, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, 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,
|
|
32225
|
+
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 };
|
|
31667
32226
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|