geonetwork-ui 2.2.0-dev.886aae61 → 2.2.0-dev.8cce3b0e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +77 -52
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +16 -11
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +23 -16
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +21 -18
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
- package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
- package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +23 -3
- package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
- package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
- package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +11 -1
- package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
- package/esm2022/libs/feature/search/src/index.mjs +4 -1
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +7 -4
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
- package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +3 -3
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
- package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
- package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +3 -1
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -17
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +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 +12 -5
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
- package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +2 -2
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +12 -7
- package/esm2022/libs/ui/layout/src/index.mjs +3 -1
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
- package/esm2022/libs/ui/search/src/index.mjs +1 -2
- package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
- package/esm2022/libs/util/i18n/src/index.mjs +1 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
- package/esm2022/translations/de.json +106 -93
- package/esm2022/translations/en.json +38 -25
- package/esm2022/translations/es.json +17 -4
- package/esm2022/translations/fr.json +22 -9
- package/esm2022/translations/it.json +29 -16
- package/esm2022/translations/nl.json +17 -4
- package/esm2022/translations/pt.json +17 -4
- package/fesm2022/geonetwork-ui.mjs +1295 -808
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -4
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +15 -15
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
- package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
- package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/map/src/index.d.ts +1 -0
- package/libs/feature/map/src/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
- package/libs/feature/map/src/lib/feature-map.module.d.ts +15 -12
- package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +2 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
- package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/index.d.ts +3 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +5 -4
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
- package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts +2 -0
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +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 +3 -2
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -39
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +2 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
- package/libs/ui/search/src/index.d.ts +0 -1
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/index.d.ts +0 -1
- package/libs/util/i18n/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +22 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +3 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +112 -65
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +19 -12
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +62 -43
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +91 -59
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
- package/src/libs/common/domain/src/lib/index.ts +2 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +17 -18
- package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +6 -2
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
- package/src/libs/feature/map/src/index.ts +1 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +12 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
- package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
- package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +6 -2
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +16 -0
- package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
- package/src/libs/feature/search/src/index.ts +3 -0
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +12 -4
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -1
- package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
- package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
- package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
- package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
- package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -0
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +54 -54
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +2 -2
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +101 -45
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +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 +5 -1
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +8 -3
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +5 -2
- package/src/libs/ui/layout/src/index.ts +2 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
- package/src/libs/ui/search/src/index.ts +0 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
- package/translations/de.json +106 -93
- package/translations/en.json +38 -25
- package/translations/es.json +17 -4
- package/translations/fr.json +22 -9
- package/translations/it.json +29 -16
- package/translations/nl.json +17 -4
- package/translations/pt.json +17 -4
- package/translations/sk.json +17 -4
- package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
- package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
- package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
- package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
- package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
- package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
- package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
- package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
- package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
- package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
- package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
- package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
- /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
- /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ElementRef, ViewChildren } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
|
-
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService
|
|
8
|
+
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
|
-
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject,
|
|
15
|
+
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
18
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
|
|
@@ -32,8 +32,8 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
|
|
|
32
32
|
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
33
33
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
34
34
|
import WMTSCapabilities from 'ol/format/WMTSCapabilities';
|
|
35
|
-
import { WmsEndpoint, sharedFetch, useCache, WfsEndpoint } from '@camptocamp/ogc-client';
|
|
36
35
|
import chroma from 'chroma-js';
|
|
36
|
+
import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
37
37
|
import { register, fromEPSGCode } from 'ol/proj/proj4';
|
|
38
38
|
import proj4 from 'proj4/dist/proj4';
|
|
39
39
|
import * as TOML from '@ltd/j-toml';
|
|
@@ -73,10 +73,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|
|
73
73
|
import * as i3$2 from '@angular/material/datepicker';
|
|
74
74
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
75
75
|
import { MatInputModule } from '@angular/material/input';
|
|
76
|
+
import * as basicLightbox from 'basiclightbox';
|
|
76
77
|
import * as i1$8 from '@ngrx/effects';
|
|
77
78
|
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
78
79
|
import tippy from 'tippy.js';
|
|
79
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
|
+
import { Polygon } from 'ol/geom';
|
|
82
|
+
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
80
83
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
81
84
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
82
85
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -646,28 +649,32 @@ function extractStatus() {
|
|
|
646
649
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
647
650
|
}
|
|
648
651
|
// from gmd:resourceConstraints
|
|
649
|
-
function
|
|
650
|
-
|
|
651
|
-
|
|
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 }),
|
|
652
655
|
text,
|
|
653
|
-
type: 'other',
|
|
654
656
|
})));
|
|
655
|
-
|
|
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 }),
|
|
656
662
|
text,
|
|
657
|
-
type: 'security',
|
|
658
663
|
})));
|
|
659
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
660
664
|
}
|
|
661
665
|
// from gmd:resourceConstraints
|
|
662
|
-
function
|
|
663
|
-
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
|
+
})));
|
|
664
671
|
}
|
|
665
672
|
// from gmd:resourceConstraints
|
|
666
673
|
function extractLicenses() {
|
|
667
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
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]) => ({
|
|
668
675
|
...(url && { url }),
|
|
669
676
|
text,
|
|
670
|
-
})))
|
|
677
|
+
})));
|
|
671
678
|
}
|
|
672
679
|
// from gmd:MD_Distribution
|
|
673
680
|
function extractDatasetDistributions() {
|
|
@@ -839,11 +846,14 @@ function readStatus(rootEl) {
|
|
|
839
846
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
840
847
|
}
|
|
841
848
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
842
|
-
function
|
|
843
|
-
return pipe(getConstraints, mapArray(
|
|
849
|
+
function readLegalConstraints(rootEl) {
|
|
850
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
844
851
|
}
|
|
845
|
-
function
|
|
846
|
-
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);
|
|
847
857
|
}
|
|
848
858
|
function readLicenses(rootEl) {
|
|
849
859
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
@@ -1076,23 +1086,23 @@ function appendKeywords(keywords, type) {
|
|
|
1076
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)))
|
|
1077
1087
|
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
|
|
1078
1088
|
}
|
|
1079
|
-
function
|
|
1080
|
-
|
|
1081
|
-
// remove legal constraints that *only* have 'otherRestrictions'
|
|
1082
|
-
const otherConstraintsFilter = pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code === 'otherRestrictions'));
|
|
1083
|
-
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray((el) => securityConstraintsFilter(el) || otherConstraintsFilter(el))));
|
|
1084
|
-
}
|
|
1085
|
-
function createAccessConstraint(constraint) {
|
|
1086
|
-
if (constraint.type === 'security') {
|
|
1089
|
+
function createConstraint(constraint, type) {
|
|
1090
|
+
if (type === 'security') {
|
|
1087
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))));
|
|
1088
1092
|
}
|
|
1089
|
-
|
|
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))));
|
|
1090
1097
|
}
|
|
1091
|
-
function
|
|
1098
|
+
function removeOtherConstraints() {
|
|
1092
1099
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1093
1100
|
}
|
|
1094
|
-
function
|
|
1095
|
-
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')))));
|
|
1096
1106
|
}
|
|
1097
1107
|
function removeLicenses() {
|
|
1098
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')))));
|
|
@@ -1196,14 +1206,17 @@ function writeKeywords(record, rootEl) {
|
|
|
1196
1206
|
function writeThemes(record, rootEl) {
|
|
1197
1207
|
pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
|
|
1198
1208
|
}
|
|
1199
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1200
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1201
|
-
}
|
|
1202
1209
|
function writeLicenses(record, rootEl) {
|
|
1203
1210
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1204
1211
|
}
|
|
1205
|
-
function
|
|
1206
|
-
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);
|
|
1207
1220
|
}
|
|
1208
1221
|
function writeUpdateFrequency(record, rootEl) {
|
|
1209
1222
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1301,8 +1314,9 @@ function toModel(xml) {
|
|
|
1301
1314
|
const recordCreated = recordUpdated;
|
|
1302
1315
|
const keywords = readKeywords(rootEl);
|
|
1303
1316
|
const themes = readThemes(rootEl);
|
|
1304
|
-
const
|
|
1305
|
-
const
|
|
1317
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1318
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1319
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1306
1320
|
const licenses = readLicenses(rootEl);
|
|
1307
1321
|
const overviews = readOverviews(rootEl);
|
|
1308
1322
|
// not used yet
|
|
@@ -1330,9 +1344,10 @@ function toModel(xml) {
|
|
|
1330
1344
|
contactsForResource: [],
|
|
1331
1345
|
keywords,
|
|
1332
1346
|
themes,
|
|
1333
|
-
accessConstraints,
|
|
1334
|
-
useLimitations,
|
|
1335
1347
|
licenses,
|
|
1348
|
+
legalConstraints,
|
|
1349
|
+
securityConstraints,
|
|
1350
|
+
otherConstraints,
|
|
1336
1351
|
...(datasetCreated && { datasetCreated }),
|
|
1337
1352
|
...(datasetUpdated && { datasetUpdated }),
|
|
1338
1353
|
lineage,
|
|
@@ -1357,9 +1372,10 @@ function toModel(xml) {
|
|
|
1357
1372
|
contacts,
|
|
1358
1373
|
keywords,
|
|
1359
1374
|
themes,
|
|
1360
|
-
accessConstraints,
|
|
1361
|
-
useLimitations,
|
|
1362
1375
|
licenses,
|
|
1376
|
+
legalConstraints,
|
|
1377
|
+
securityConstraints,
|
|
1378
|
+
otherConstraints,
|
|
1363
1379
|
overviews,
|
|
1364
1380
|
onlineResources,
|
|
1365
1381
|
};
|
|
@@ -1385,9 +1401,11 @@ function toXml(record, originalXml) {
|
|
|
1385
1401
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1386
1402
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1387
1403
|
fieldChanged('themes') && writeThemes(record, rootEl);
|
|
1388
|
-
fieldChanged('
|
|
1404
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1405
|
+
fieldChanged('securityConstraints') &&
|
|
1406
|
+
writeSecurityConstraints(record, rootEl);
|
|
1389
1407
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1390
|
-
fieldChanged('
|
|
1408
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1391
1409
|
if (record.kind === 'dataset') {
|
|
1392
1410
|
writeStatus(record, rootEl);
|
|
1393
1411
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1413,6 +1431,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
|
|
|
1413
1431
|
const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
|
|
1414
1432
|
const toDate = (field) => new Date(field);
|
|
1415
1433
|
const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
|
|
1434
|
+
const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
|
|
1416
1435
|
const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
|
|
1417
1436
|
const getAsUrl = (field, location = window.location.toString()) => {
|
|
1418
1437
|
// an empty string is not a valid url, even though it could be considered an empty path to the root
|
|
@@ -16539,133 +16558,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
16539
16558
|
}]
|
|
16540
16559
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
16541
16560
|
|
|
16542
|
-
// IMPORTANT:
|
|
16543
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
|
|
16544
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16545
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16546
|
-
class TestTranslateLoader extends TranslateLoader {
|
|
16547
|
-
constructor(_translations = {}) {
|
|
16548
|
-
super();
|
|
16549
|
-
this._translations = _translations;
|
|
16550
|
-
}
|
|
16551
|
-
/**
|
|
16552
|
-
* Returns an {Observable} of translations for the specified language. If the
|
|
16553
|
-
* language is not recognized, an empty translations object will be returned.
|
|
16554
|
-
*
|
|
16555
|
-
* @param language the language for which the translations should be retrieved.
|
|
16556
|
-
* @returns the translations for the specified
|
|
16557
|
-
* language or an empty set of translations if the language is not recognized.
|
|
16558
|
-
*/
|
|
16559
|
-
getTranslation(language) {
|
|
16560
|
-
return of(this._translations[language] || {});
|
|
16561
|
-
}
|
|
16562
|
-
}
|
|
16563
|
-
|
|
16564
|
-
// IMPORTANT:
|
|
16565
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
|
|
16566
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16567
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16568
|
-
/**
|
|
16569
|
-
* The TranslateTestingModule provides the {TranslateModule} as well as a
|
|
16570
|
-
* {TranslateService} configured to return translations specific for the
|
|
16571
|
-
* test environment.
|
|
16572
|
-
*
|
|
16573
|
-
* @export
|
|
16574
|
-
*/
|
|
16575
|
-
class TranslateTestingModule {
|
|
16576
|
-
constructor() {
|
|
16577
|
-
this._translations = {};
|
|
16578
|
-
}
|
|
16579
|
-
static withTranslations(languageOrTranslations, translations) {
|
|
16580
|
-
const translateTestingModule = new TranslateTestingModule();
|
|
16581
|
-
if (typeof languageOrTranslations === 'string') {
|
|
16582
|
-
return translateTestingModule.withTranslations(languageOrTranslations, translations);
|
|
16583
|
-
}
|
|
16584
|
-
return translateTestingModule.withTranslations(languageOrTranslations);
|
|
16585
|
-
}
|
|
16586
|
-
get ngModule() {
|
|
16587
|
-
return TranslateTestingModule;
|
|
16588
|
-
}
|
|
16589
|
-
get providers() {
|
|
16590
|
-
const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
|
|
16591
|
-
return [
|
|
16592
|
-
{
|
|
16593
|
-
provide: TranslateService,
|
|
16594
|
-
useValue: translateService,
|
|
16595
|
-
},
|
|
16596
|
-
];
|
|
16597
|
-
}
|
|
16598
|
-
withTranslations(languageOrTranslations, translations) {
|
|
16599
|
-
if (typeof languageOrTranslations === 'string' && translations) {
|
|
16600
|
-
this.addTranslations(languageOrTranslations, translations);
|
|
16601
|
-
this._defaultLanguage = languageOrTranslations;
|
|
16602
|
-
}
|
|
16603
|
-
else if (languageOrTranslations) {
|
|
16604
|
-
Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
|
|
16605
|
-
}
|
|
16606
|
-
return this;
|
|
16607
|
-
}
|
|
16608
|
-
/**
|
|
16609
|
-
* Updates the {TranslationTestingModule} to provide a {TranslateService} that will
|
|
16610
|
-
* use the provided {TranslateCompiler} to translate the test translations.
|
|
16611
|
-
*
|
|
16612
|
-
* @example
|
|
16613
|
-
*
|
|
16614
|
-
* TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
|
|
16615
|
-
* .withCompiler(new TranslateMessageFormatCompiler());
|
|
16616
|
-
*
|
|
16617
|
-
* @param compiler the compiler to use to compile the test translations.
|
|
16618
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16619
|
-
* @memberof TranslateTestingModule
|
|
16620
|
-
*/
|
|
16621
|
-
withCompiler(compiler) {
|
|
16622
|
-
this._compiler = compiler;
|
|
16623
|
-
return this;
|
|
16624
|
-
}
|
|
16625
|
-
/**
|
|
16626
|
-
* Updates the {TranslateTestingModule} to use the provided language as the default language.
|
|
16627
|
-
* By default, the default language will be set to the first language provided.
|
|
16628
|
-
*
|
|
16629
|
-
* @example
|
|
16630
|
-
*
|
|
16631
|
-
* TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
|
|
16632
|
-
* .withTranslations('en', ENGLISH_TRANSLATIONS)
|
|
16633
|
-
* .withDefaultLanguage('en');
|
|
16634
|
-
*
|
|
16635
|
-
* @param language the new default language for translations.
|
|
16636
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16637
|
-
* @memberof TranslateTestingModule
|
|
16638
|
-
*/
|
|
16639
|
-
withDefaultLanguage(language) {
|
|
16640
|
-
this._defaultLanguage = language || this._defaultLanguage;
|
|
16641
|
-
return this;
|
|
16642
|
-
}
|
|
16643
|
-
addTranslations(language, translations) {
|
|
16644
|
-
if (!this._defaultLanguage) {
|
|
16645
|
-
this._defaultLanguage = language;
|
|
16646
|
-
}
|
|
16647
|
-
if (this._translations[language]) {
|
|
16648
|
-
this._translations[language] = {
|
|
16649
|
-
...this._translations[language],
|
|
16650
|
-
...translations,
|
|
16651
|
-
};
|
|
16652
|
-
}
|
|
16653
|
-
else {
|
|
16654
|
-
this._translations[language] = translations;
|
|
16655
|
-
}
|
|
16656
|
-
}
|
|
16657
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16658
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
|
|
16659
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
|
|
16660
|
-
}
|
|
16661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
|
|
16662
|
-
type: NgModule,
|
|
16663
|
-
args: [{
|
|
16664
|
-
imports: [TranslateModule],
|
|
16665
|
-
exports: [TranslateModule],
|
|
16666
|
-
}]
|
|
16667
|
-
}] });
|
|
16668
|
-
|
|
16669
16561
|
var dropFile$6 = "Datei ablegen";
|
|
16670
16562
|
var next$6 = "weiter";
|
|
16671
16563
|
var previous$6 = "zurück";
|
|
@@ -16688,20 +16580,21 @@ var de = {
|
|
|
16688
16580
|
"chart.type.line": "Liniendiagramm",
|
|
16689
16581
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16690
16582
|
"chart.type.pie": "Kreisdiagramm",
|
|
16691
|
-
"dashboard.
|
|
16692
|
-
"dashboard.
|
|
16693
|
-
"dashboard.records.
|
|
16694
|
-
"dashboard.records.
|
|
16695
|
-
"dashboard.records.
|
|
16696
|
-
"dashboard.records.
|
|
16697
|
-
"dashboard.records.
|
|
16698
|
-
"dashboard.records.
|
|
16699
|
-
"dashboard.records.
|
|
16700
|
-
"dashboard.records.
|
|
16701
|
-
"dashboard.records.
|
|
16702
|
-
"dashboard.records.
|
|
16703
|
-
"dashboard.records.
|
|
16704
|
-
"dashboard.
|
|
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": "",
|
|
16705
16598
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16706
16599
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16707
16600
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16715,7 +16608,7 @@ var de = {
|
|
|
16715
16608
|
"datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
|
|
16716
16609
|
"datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
|
|
16717
16610
|
"datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
|
|
16718
|
-
"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",
|
|
16719
16612
|
"datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
|
|
16720
16613
|
"datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
|
|
16721
16614
|
"datafeeder.month.april": "April",
|
|
@@ -16730,16 +16623,16 @@ var de = {
|
|
|
16730
16623
|
"datafeeder.month.november": "November",
|
|
16731
16624
|
"datafeeder.month.october": "Oktober",
|
|
16732
16625
|
"datafeeder.month.september": "September",
|
|
16733
|
-
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist",
|
|
16734
|
-
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz zum Veröffentlichen?",
|
|
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?",
|
|
16735
16628
|
"datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
|
|
16736
|
-
"datafeeder.publish.title": "Vielen Dank! Ihr Datensatz wird veröffentlicht",
|
|
16629
|
+
"datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
|
|
16737
16630
|
"datafeeder.publish.upload": "Jetzt hochladen",
|
|
16738
16631
|
"datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
|
|
16739
16632
|
"datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
|
|
16740
16633
|
"datafeeder.publishSuccess.mapViewer": "Kartenviewer",
|
|
16741
16634
|
"datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
|
|
16742
|
-
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! Ihr Datensatz wurde veröffentlicht",
|
|
16635
|
+
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
|
|
16743
16636
|
"datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
|
|
16744
16637
|
"datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
|
|
16745
16638
|
"datafeeder.summarizePage.previous": "Zurück",
|
|
@@ -16747,11 +16640,11 @@ var de = {
|
|
|
16747
16640
|
"datafeeder.summarizePage.title": "Sie sind fast fertig...",
|
|
16748
16641
|
"datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
|
|
16749
16642
|
"datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
|
|
16750
|
-
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen
|
|
16643
|
+
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
|
|
16751
16644
|
"datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
|
|
16752
16645
|
"datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
|
|
16753
|
-
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie:
|
|
16754
|
-
"datafeeder.upload.error.title.analysis": "Fehler
|
|
16646
|
+
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
|
|
16647
|
+
"datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
|
|
16755
16648
|
"datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
|
|
16756
16649
|
"datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
|
|
16757
16650
|
"datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
|
|
@@ -16759,19 +16652,19 @@ var de = {
|
|
|
16759
16652
|
"datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
|
|
16760
16653
|
"datafeeder.upload.illustration.enrichment": "Anreicherung",
|
|
16761
16654
|
"datafeeder.upload.illustration.import": "Import",
|
|
16762
|
-
"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",
|
|
16763
16656
|
"datafeeder.upload.illustration.validation": "Validierung",
|
|
16764
|
-
"datafeeder.upload.illustration.verification": "
|
|
16657
|
+
"datafeeder.upload.illustration.verification": "Überprüfung",
|
|
16765
16658
|
"datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
|
|
16766
16659
|
"datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
|
|
16767
16660
|
"datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
|
|
16768
16661
|
"datafeeder.upload.uploadButton": "Hochladen",
|
|
16769
|
-
"datafeeder.validation.encoding": "
|
|
16662
|
+
"datafeeder.validation.encoding": "Codierung",
|
|
16770
16663
|
"datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
|
|
16771
16664
|
"datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
|
|
16772
16665
|
"datafeeder.validation.projection": "Raumbezugssystem:",
|
|
16773
|
-
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem",
|
|
16774
|
-
"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",
|
|
16775
16668
|
"datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
|
|
16776
16669
|
"datafeeder.wizardSummarize.createdAt": "Erstellt am",
|
|
16777
16670
|
"datafeeder.wizardSummarize.scale": "Maßstab",
|
|
@@ -16781,19 +16674,20 @@ var de = {
|
|
|
16781
16674
|
"datahub.header.news": "Startseite",
|
|
16782
16675
|
"datahub.header.organisations": "Organisationen",
|
|
16783
16676
|
"datahub.header.popularRecords": "Die beliebtesten",
|
|
16784
|
-
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten
|
|
16785
|
-
"datahub.news.contact.contactus": "",
|
|
16786
|
-
"datahub.news.contact.html": "",
|
|
16787
|
-
"datahub.news.contact.title": "",
|
|
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?",
|
|
16788
16681
|
"datahub.news.feed": "Nachrichtenfeed",
|
|
16789
16682
|
"datahub.news.figures": "Indikatoren",
|
|
16790
|
-
"datahub.
|
|
16683
|
+
"datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
|
|
16684
|
+
"datahub.search.back": "Zurück",
|
|
16791
16685
|
"datahub.search.filter.all": "Alle",
|
|
16792
|
-
"datahub.search.filter.generatedByWfs": "Generiert durch API",
|
|
16686
|
+
"datahub.search.filter.generatedByWfs": "Generiert durch eine API",
|
|
16793
16687
|
"datahub.search.filter.others": "Andere",
|
|
16794
16688
|
"dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
|
|
16795
16689
|
"dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
|
|
16796
|
-
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht
|
|
16690
|
+
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
|
|
16797
16691
|
"dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
|
|
16798
16692
|
"dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
|
|
16799
16693
|
"domain.record.status.completed": "Abgeschlossen",
|
|
@@ -16801,18 +16695,18 @@ var de = {
|
|
|
16801
16695
|
"domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
|
|
16802
16696
|
"domain.record.status.removed": "Entfernt",
|
|
16803
16697
|
"domain.record.status.under_development": "In Erstellung",
|
|
16804
|
-
"domain.record.updateFrequency.asNeeded": "
|
|
16805
|
-
"domain.record.updateFrequency.continual": "
|
|
16698
|
+
"domain.record.updateFrequency.asNeeded": "Nach Bedarf",
|
|
16699
|
+
"domain.record.updateFrequency.continual": "Fortlaufend",
|
|
16806
16700
|
"domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
|
|
16807
|
-
"domain.record.updateFrequency.irregular": "
|
|
16701
|
+
"domain.record.updateFrequency.irregular": "Unregelmäßig",
|
|
16808
16702
|
"domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
|
|
16809
16703
|
"domain.record.updateFrequency.notPlanned": "Nicht geplant",
|
|
16810
|
-
"domain.record.updateFrequency.periodic": "
|
|
16704
|
+
"domain.record.updateFrequency.periodic": "Regelmäßig",
|
|
16811
16705
|
"domain.record.updateFrequency.unknown": "Unbekannt",
|
|
16812
16706
|
"domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
|
|
16813
16707
|
"domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
|
|
16814
16708
|
"downloads.format.unknown": "unbekannt",
|
|
16815
|
-
"downloads.wfs.featuretype.not.found": "
|
|
16709
|
+
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
16816
16710
|
dropFile: dropFile$6,
|
|
16817
16711
|
"externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
|
|
16818
16712
|
"facets.block.title.OrgForResource": "Organisation",
|
|
@@ -16847,14 +16741,18 @@ var de = {
|
|
|
16847
16741
|
"map.add.layer.file": "Aus einer Datei",
|
|
16848
16742
|
"map.add.layer.wfs": "Aus WFS",
|
|
16849
16743
|
"map.add.layer.wms": "Aus WMS",
|
|
16850
|
-
"map.
|
|
16851
|
-
"map.
|
|
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",
|
|
16852
16749
|
"map.layers.list": "Ebenen",
|
|
16853
16750
|
"map.loading.data": "Kartendaten werden geladen...",
|
|
16854
|
-
"map.loading.service": "",
|
|
16751
|
+
"map.loading.service": "Dienst wird geladen...",
|
|
16855
16752
|
"map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
|
|
16856
16753
|
"map.select.layer": "Datenquelle",
|
|
16857
|
-
"map.
|
|
16754
|
+
"map.wfs.urlInput.hint": "Geben Sie die WFS URL ein",
|
|
16755
|
+
"map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
|
|
16858
16756
|
"multiselect.filter.placeholder": "Suche",
|
|
16859
16757
|
"nav.back": "Zurück",
|
|
16860
16758
|
next: next$6,
|
|
@@ -16870,56 +16768,61 @@ var de = {
|
|
|
16870
16768
|
"pagination.pageOf": "von",
|
|
16871
16769
|
previous: previous$6,
|
|
16872
16770
|
"record.action.download": "Herunterladen",
|
|
16873
|
-
"record.action.view": "
|
|
16771
|
+
"record.action.view": "Anzeigen",
|
|
16874
16772
|
"record.externalViewer.open": "In externem Kartenviewer öffnen",
|
|
16875
16773
|
"record.metadata.about": "Beschreibung",
|
|
16876
16774
|
"record.metadata.api": "API",
|
|
16877
|
-
"record.metadata.api.form.closeButton": "",
|
|
16878
|
-
"record.metadata.api.form.closeForm": "",
|
|
16879
|
-
"record.metadata.api.form.create": "",
|
|
16880
|
-
"record.metadata.api.form.customUrl": "",
|
|
16881
|
-
"record.metadata.api.form.limit": "",
|
|
16882
|
-
"record.metadata.api.form.limit.all": "",
|
|
16883
|
-
"record.metadata.api.form.offset": "",
|
|
16884
|
-
"record.metadata.api.form.openForm": "",
|
|
16885
|
-
"record.metadata.api.form.reset": "",
|
|
16886
|
-
"record.metadata.api.form.title": "",
|
|
16887
|
-
"record.metadata.api.form.type": "",
|
|
16888
|
-
"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",
|
|
16889
16787
|
"record.metadata.catalog": "Katalog",
|
|
16890
16788
|
"record.metadata.contact": "Kontakt",
|
|
16891
|
-
"record.metadata.
|
|
16892
|
-
"record.metadata.details": "Details",
|
|
16789
|
+
"record.metadata.details": "Technische Informationen",
|
|
16893
16790
|
"record.metadata.download": "Downloads",
|
|
16894
|
-
"record.metadata.formats": "",
|
|
16895
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16791
|
+
"record.metadata.formats": "Formate",
|
|
16896
16792
|
"record.metadata.keywords": "Stichworte",
|
|
16793
|
+
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16897
16794
|
"record.metadata.links": "Links",
|
|
16898
|
-
"record.metadata.noUsage": "Für diesen Datensatz sind keine
|
|
16795
|
+
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16899
16796
|
"record.metadata.origin": "Über die Daten",
|
|
16797
|
+
"record.metadata.otherConstraints": "",
|
|
16798
|
+
"record.metadata.owner": "",
|
|
16900
16799
|
"record.metadata.preview": "Vorschau",
|
|
16901
16800
|
"record.metadata.publications": "Veröffentlichungen",
|
|
16902
|
-
"record.metadata.quality": "",
|
|
16903
|
-
"record.metadata.quality.contact.failed": "",
|
|
16904
|
-
"record.metadata.quality.contact.success": "",
|
|
16905
|
-
"record.metadata.quality.description.failed": "",
|
|
16906
|
-
"record.metadata.quality.description.success": "",
|
|
16907
|
-
"record.metadata.quality.details": "",
|
|
16908
|
-
"record.metadata.quality.keywords.failed": "",
|
|
16909
|
-
"record.metadata.quality.keywords.success": "",
|
|
16910
|
-
"record.metadata.quality.legalConstraints.failed": "",
|
|
16911
|
-
"record.metadata.quality.legalConstraints.success": "",
|
|
16912
|
-
"record.metadata.quality.organisation.failed": "",
|
|
16913
|
-
"record.metadata.quality.organisation.success": "",
|
|
16914
|
-
"record.metadata.quality.title.failed": "",
|
|
16915
|
-
"record.metadata.quality.title.success": "",
|
|
16916
|
-
"record.metadata.quality.topic.failed": "",
|
|
16917
|
-
"record.metadata.quality.topic.success": "",
|
|
16918
|
-
"record.metadata.quality.updateFrequency.failed": "",
|
|
16919
|
-
"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",
|
|
16920
16819
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16921
|
-
"record.metadata.sheet": "Weitere Informationen
|
|
16820
|
+
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16821
|
+
"record.metadata.status": "",
|
|
16822
|
+
"record.metadata.themes": "Kategorien",
|
|
16922
16823
|
"record.metadata.title": "Titel",
|
|
16824
|
+
"record.metadata.type": "Geographischer Datensatz",
|
|
16825
|
+
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16923
16826
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
16924
16827
|
"record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
|
|
16925
16828
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
@@ -16931,28 +16834,29 @@ var de = {
|
|
|
16931
16834
|
"record.was.created.time": "erstellte diesen Datensatz {time}",
|
|
16932
16835
|
records: records$6,
|
|
16933
16836
|
"results.layout.selectOne": "Layout auswählen",
|
|
16934
|
-
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{
|
|
16935
|
-
"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>",
|
|
16936
16839
|
"results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
|
|
16937
|
-
"results.records.hits.selected": "",
|
|
16840
|
+
"results.records.hits.selected": "{ amount } ausgewählt",
|
|
16938
16841
|
"results.showMore": "Mehr Ergebnisse anzeigen...",
|
|
16939
|
-
"results.sortBy.dateStamp": "
|
|
16842
|
+
"results.sortBy.dateStamp": "Neueste",
|
|
16940
16843
|
"results.sortBy.popularity": "Beliebtheit",
|
|
16941
|
-
"results.sortBy.qualityScore": "",
|
|
16844
|
+
"results.sortBy.qualityScore": "Qualitätsbewertung",
|
|
16942
16845
|
"results.sortBy.relevancy": "Relevanz",
|
|
16943
16846
|
"search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
|
|
16944
16847
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
16945
|
-
"search.error.receivedError": "Ein Fehler
|
|
16848
|
+
"search.error.receivedError": "Ein Fehler ist aufgetreten",
|
|
16946
16849
|
"search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
|
|
16947
|
-
"search.field.any.placeholder": "Suche
|
|
16850
|
+
"search.field.any.placeholder": "Suche Datensätze ...",
|
|
16948
16851
|
"search.field.sortBy": "Sortieren nach:",
|
|
16949
16852
|
"search.filters.clear": "Zurücksetzen",
|
|
16950
|
-
"search.filters.contact": "
|
|
16853
|
+
"search.filters.contact": "Kontakte",
|
|
16951
16854
|
"search.filters.format": "Formate",
|
|
16952
16855
|
"search.filters.inspireKeyword": "INSPIRE-Schlüsselwort",
|
|
16953
16856
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16954
16857
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16955
16858
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16859
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16956
16860
|
"search.filters.license": "Lizenz",
|
|
16957
16861
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16958
16862
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -16965,13 +16869,13 @@ var de = {
|
|
|
16965
16869
|
"search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
16966
16870
|
"search.filters.maximize": "Erweitern",
|
|
16967
16871
|
"search.filters.minimize": "Minimieren",
|
|
16968
|
-
"search.filters.myRecords": "",
|
|
16969
|
-
"search.filters.myRecordsHelp": "",
|
|
16970
|
-
"search.filters.otherRecords": "",
|
|
16872
|
+
"search.filters.myRecords": "Nur meine Datensätze anzeigen",
|
|
16873
|
+
"search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
|
|
16874
|
+
"search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
|
|
16971
16875
|
"search.filters.publicationYear": "Veröffentlichungsjahr",
|
|
16972
16876
|
"search.filters.publisher": "Organisationen",
|
|
16973
|
-
"search.filters.representationType": "",
|
|
16974
|
-
"search.filters.resourceType": "",
|
|
16877
|
+
"search.filters.representationType": "Repräsentationstyp",
|
|
16878
|
+
"search.filters.resourceType": "Ressourcentyp",
|
|
16975
16879
|
"search.filters.standard": "Standard",
|
|
16976
16880
|
"search.filters.title": "Ergebnisse filtern",
|
|
16977
16881
|
"search.filters.topic": "Thema",
|
|
@@ -16983,6 +16887,7 @@ var de = {
|
|
|
16983
16887
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16984
16888
|
"table.select.data": "Datenquelle",
|
|
16985
16889
|
"tooltip.html.copy": "HTML kopieren",
|
|
16890
|
+
"tooltip.id.copy": "",
|
|
16986
16891
|
"tooltip.url.copy": "URL kopieren",
|
|
16987
16892
|
"tooltip.url.open": "URL öffnen",
|
|
16988
16893
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17016,20 +16921,21 @@ var en = {
|
|
|
17016
16921
|
"chart.type.line": "line chart",
|
|
17017
16922
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17018
16923
|
"chart.type.pie": "pie chart",
|
|
16924
|
+
"dashboard.createRecord": "New record",
|
|
17019
16925
|
"dashboard.labels.mySpace": "My space",
|
|
17020
|
-
"dashboard.records.all": "
|
|
16926
|
+
"dashboard.records.all": "Metadata records",
|
|
17021
16927
|
"dashboard.records.myDraft": "My drafts",
|
|
17022
16928
|
"dashboard.records.myLibrary": "My library",
|
|
17023
16929
|
"dashboard.records.myOrg": "Organization",
|
|
17024
16930
|
"dashboard.records.myRecords": "My Records",
|
|
17025
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17026
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17027
16931
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17028
16932
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17029
16933
|
"dashboard.records.userDetail": "Name",
|
|
17030
16934
|
"dashboard.records.userEmail": "Email",
|
|
17031
16935
|
"dashboard.records.username": "Username",
|
|
17032
16936
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
16937
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
16938
|
+
"dashboard.results.listResources": "Show resources",
|
|
17033
16939
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17034
16940
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17035
16941
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17115,7 +17021,8 @@ var en = {
|
|
|
17115
17021
|
"datahub.news.contact.title": "A specific need?",
|
|
17116
17022
|
"datahub.news.feed": "News feed",
|
|
17117
17023
|
"datahub.news.figures": "Indicators",
|
|
17118
|
-
"datahub.
|
|
17024
|
+
"datahub.record.addToFavorites": "Add to favorites",
|
|
17025
|
+
"datahub.search.back": "Back",
|
|
17119
17026
|
"datahub.search.filter.all": "All",
|
|
17120
17027
|
"datahub.search.filter.generatedByWfs": "generated by an API",
|
|
17121
17028
|
"datahub.search.filter.others": "Others",
|
|
@@ -17175,6 +17082,9 @@ var en = {
|
|
|
17175
17082
|
"map.add.layer.file": "From a file",
|
|
17176
17083
|
"map.add.layer.wfs": "From WFS",
|
|
17177
17084
|
"map.add.layer.wms": "From WMS",
|
|
17085
|
+
"map.addFromFile.placeholder": "Click or drop a file here",
|
|
17086
|
+
"map.geocoding.placeholder": "Search for a place",
|
|
17087
|
+
"map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
|
|
17178
17088
|
"map.layer.add": "Add",
|
|
17179
17089
|
"map.layers.available": "Available Layers",
|
|
17180
17090
|
"map.layers.list": "Layers",
|
|
@@ -17182,6 +17092,7 @@ var en = {
|
|
|
17182
17092
|
"map.loading.service": "Loading service...",
|
|
17183
17093
|
"map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
|
|
17184
17094
|
"map.select.layer": "Data source",
|
|
17095
|
+
"map.wfs.urlInput.hint": "Enter WFS service URL",
|
|
17185
17096
|
"map.wms.urlInput.hint": "Enter WMS service URL",
|
|
17186
17097
|
"multiselect.filter.placeholder": "Search",
|
|
17187
17098
|
"nav.back": "Back",
|
|
@@ -17216,42 +17127,47 @@ var en = {
|
|
|
17216
17127
|
"record.metadata.author": "Author",
|
|
17217
17128
|
"record.metadata.catalog": "Catalog",
|
|
17218
17129
|
"record.metadata.contact": "Contact",
|
|
17219
|
-
"record.metadata.
|
|
17220
|
-
"record.metadata.details": "Details",
|
|
17130
|
+
"record.metadata.details": "Technical information",
|
|
17221
17131
|
"record.metadata.download": "Downloads",
|
|
17222
17132
|
"record.metadata.formats": "Formats",
|
|
17223
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17224
17133
|
"record.metadata.keywords": "Keywords",
|
|
17134
|
+
"record.metadata.lastUpdate": "Last updated on",
|
|
17225
17135
|
"record.metadata.links": "Links",
|
|
17226
17136
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17227
17137
|
"record.metadata.origin": "About the data",
|
|
17138
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17139
|
+
"record.metadata.owner": "Catalog of origin",
|
|
17228
17140
|
"record.metadata.preview": "Preview",
|
|
17229
17141
|
"record.metadata.publications": "publications",
|
|
17230
17142
|
"record.metadata.quality": "Metadata Quality",
|
|
17231
|
-
"record.metadata.quality.contact.failed": "Contact is not
|
|
17232
|
-
"record.metadata.quality.contact.success": "Contact is
|
|
17233
|
-
"record.metadata.quality.description.failed": "Description is not
|
|
17234
|
-
"record.metadata.quality.description.success": "Description is
|
|
17143
|
+
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
17144
|
+
"record.metadata.quality.contact.success": "Contact is specified",
|
|
17145
|
+
"record.metadata.quality.description.failed": "Description is not specified",
|
|
17146
|
+
"record.metadata.quality.description.success": "Description is specified",
|
|
17235
17147
|
"record.metadata.quality.details": "Details",
|
|
17236
|
-
"record.metadata.quality.keywords.failed": "Keywords are not
|
|
17237
|
-
"record.metadata.quality.keywords.success": "Keywords are
|
|
17238
|
-
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not
|
|
17239
|
-
"record.metadata.quality.legalConstraints.success": "Legal constraints are
|
|
17240
|
-
"record.metadata.quality.organisation.failed": "Organisation is not
|
|
17241
|
-
"record.metadata.quality.organisation.success": "Organisation is
|
|
17242
|
-
"record.metadata.quality.title.failed": "Title is not
|
|
17243
|
-
"record.metadata.quality.title.success": "Title is
|
|
17244
|
-
"record.metadata.quality.topic.failed": "Topic is not
|
|
17245
|
-
"record.metadata.quality.topic.success": "Topic is
|
|
17246
|
-
"record.metadata.quality.updateFrequency.failed": "Update frequency is not
|
|
17247
|
-
"record.metadata.quality.updateFrequency.success": "Update frequency is
|
|
17148
|
+
"record.metadata.quality.keywords.failed": "Keywords are not specified",
|
|
17149
|
+
"record.metadata.quality.keywords.success": "Keywords are specified",
|
|
17150
|
+
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
|
|
17151
|
+
"record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
|
|
17152
|
+
"record.metadata.quality.organisation.failed": "Organisation is not specified",
|
|
17153
|
+
"record.metadata.quality.organisation.success": "Organisation is specified",
|
|
17154
|
+
"record.metadata.quality.title.failed": "Title is not specified",
|
|
17155
|
+
"record.metadata.quality.title.success": "Title is specified",
|
|
17156
|
+
"record.metadata.quality.topic.failed": "Topic is not specified",
|
|
17157
|
+
"record.metadata.quality.topic.success": "Topic is specified",
|
|
17158
|
+
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
17159
|
+
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17248
17160
|
"record.metadata.related": "Related records",
|
|
17249
|
-
"record.metadata.sheet": "
|
|
17161
|
+
"record.metadata.sheet": "Original metadata",
|
|
17162
|
+
"record.metadata.status": "Status",
|
|
17163
|
+
"record.metadata.themes": "Categories",
|
|
17250
17164
|
"record.metadata.title": "Title",
|
|
17165
|
+
"record.metadata.type": "Geographical dataset",
|
|
17166
|
+
"record.metadata.uniqueId": "Unique Identifier",
|
|
17251
17167
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17252
17168
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17253
17169
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17254
|
-
"record.metadata.usage": "
|
|
17170
|
+
"record.metadata.usage": "License and Conditions",
|
|
17255
17171
|
"record.more.details": "Read more",
|
|
17256
17172
|
"record.tab.chart": "Chart",
|
|
17257
17173
|
"record.tab.data": "Table",
|
|
@@ -17281,6 +17197,7 @@ var en = {
|
|
|
17281
17197
|
"search.filters.isSpatial": "Is spatial data",
|
|
17282
17198
|
"search.filters.isSpatial.no": "non spatial",
|
|
17283
17199
|
"search.filters.isSpatial.yes": "spatial",
|
|
17200
|
+
"search.filters.keyword": "Keyword",
|
|
17284
17201
|
"search.filters.license": "License",
|
|
17285
17202
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17286
17203
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17311,6 +17228,7 @@ var en = {
|
|
|
17311
17228
|
"table.object.count": "objects in this dataset",
|
|
17312
17229
|
"table.select.data": "Data source",
|
|
17313
17230
|
"tooltip.html.copy": "Copy HTML",
|
|
17231
|
+
"tooltip.id.copy": "Copy unique identifier",
|
|
17314
17232
|
"tooltip.url.copy": "Copy URL",
|
|
17315
17233
|
"tooltip.url.open": "Open URL",
|
|
17316
17234
|
"ui.readLess": "Read less",
|
|
@@ -17344,20 +17262,21 @@ var es = {
|
|
|
17344
17262
|
"chart.type.line": "gráfico de líneas",
|
|
17345
17263
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17346
17264
|
"chart.type.pie": "gráfico circular",
|
|
17265
|
+
"dashboard.createRecord": "",
|
|
17347
17266
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17348
17267
|
"dashboard.records.all": "Catálogo",
|
|
17349
17268
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17350
17269
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17351
17270
|
"dashboard.records.myOrg": "Organización",
|
|
17352
17271
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17353
|
-
"dashboard.records.noRecord": "",
|
|
17354
|
-
"dashboard.records.noUser": "",
|
|
17355
17272
|
"dashboard.records.publishedRecords": "",
|
|
17356
17273
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17357
17274
|
"dashboard.records.userDetail": "",
|
|
17358
17275
|
"dashboard.records.userEmail": "",
|
|
17359
17276
|
"dashboard.records.username": "",
|
|
17360
17277
|
"dashboard.records.users": "",
|
|
17278
|
+
"dashboard.results.listMetadata": "",
|
|
17279
|
+
"dashboard.results.listResources": "",
|
|
17361
17280
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17362
17281
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17363
17282
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17443,6 +17362,7 @@ var es = {
|
|
|
17443
17362
|
"datahub.news.contact.title": "",
|
|
17444
17363
|
"datahub.news.feed": "",
|
|
17445
17364
|
"datahub.news.figures": "",
|
|
17365
|
+
"datahub.record.addToFavorites": "",
|
|
17446
17366
|
"datahub.search.back": "",
|
|
17447
17367
|
"datahub.search.filter.all": "",
|
|
17448
17368
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -17503,6 +17423,9 @@ var es = {
|
|
|
17503
17423
|
"map.add.layer.file": "",
|
|
17504
17424
|
"map.add.layer.wfs": "",
|
|
17505
17425
|
"map.add.layer.wms": "",
|
|
17426
|
+
"map.addFromFile.placeholder": "",
|
|
17427
|
+
"map.geocoding.placeholder": "",
|
|
17428
|
+
"map.help.addFromFile": "",
|
|
17506
17429
|
"map.layer.add": "",
|
|
17507
17430
|
"map.layers.available": "",
|
|
17508
17431
|
"map.layers.list": "",
|
|
@@ -17510,6 +17433,7 @@ var es = {
|
|
|
17510
17433
|
"map.loading.service": "",
|
|
17511
17434
|
"map.navigation.message": "",
|
|
17512
17435
|
"map.select.layer": "",
|
|
17436
|
+
"map.wfs.urlInput.hint": "",
|
|
17513
17437
|
"map.wms.urlInput.hint": "",
|
|
17514
17438
|
"multiselect.filter.placeholder": "",
|
|
17515
17439
|
"nav.back": "",
|
|
@@ -17544,15 +17468,16 @@ var es = {
|
|
|
17544
17468
|
"record.metadata.author": "",
|
|
17545
17469
|
"record.metadata.catalog": "",
|
|
17546
17470
|
"record.metadata.contact": "",
|
|
17547
|
-
"record.metadata.createdOn": "",
|
|
17548
17471
|
"record.metadata.details": "",
|
|
17549
17472
|
"record.metadata.download": "",
|
|
17550
17473
|
"record.metadata.formats": "",
|
|
17551
|
-
"record.metadata.isOpenData": "",
|
|
17552
17474
|
"record.metadata.keywords": "",
|
|
17475
|
+
"record.metadata.lastUpdate": "",
|
|
17553
17476
|
"record.metadata.links": "",
|
|
17554
17477
|
"record.metadata.noUsage": "",
|
|
17555
17478
|
"record.metadata.origin": "",
|
|
17479
|
+
"record.metadata.otherConstraints": "",
|
|
17480
|
+
"record.metadata.owner": "",
|
|
17556
17481
|
"record.metadata.preview": "",
|
|
17557
17482
|
"record.metadata.publications": "",
|
|
17558
17483
|
"record.metadata.quality": "",
|
|
@@ -17575,7 +17500,11 @@ var es = {
|
|
|
17575
17500
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17576
17501
|
"record.metadata.related": "",
|
|
17577
17502
|
"record.metadata.sheet": "",
|
|
17503
|
+
"record.metadata.status": "",
|
|
17504
|
+
"record.metadata.themes": "",
|
|
17578
17505
|
"record.metadata.title": "",
|
|
17506
|
+
"record.metadata.type": "",
|
|
17507
|
+
"record.metadata.uniqueId": "",
|
|
17579
17508
|
"record.metadata.updateFrequency": "",
|
|
17580
17509
|
"record.metadata.updateStatus": "",
|
|
17581
17510
|
"record.metadata.updatedOn": "",
|
|
@@ -17609,6 +17538,7 @@ var es = {
|
|
|
17609
17538
|
"search.filters.isSpatial": "",
|
|
17610
17539
|
"search.filters.isSpatial.no": "",
|
|
17611
17540
|
"search.filters.isSpatial.yes": "",
|
|
17541
|
+
"search.filters.keyword": "",
|
|
17612
17542
|
"search.filters.license": "",
|
|
17613
17543
|
"search.filters.license.cc-by": "",
|
|
17614
17544
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17639,6 +17569,7 @@ var es = {
|
|
|
17639
17569
|
"table.object.count": "",
|
|
17640
17570
|
"table.select.data": "",
|
|
17641
17571
|
"tooltip.html.copy": "",
|
|
17572
|
+
"tooltip.id.copy": "",
|
|
17642
17573
|
"tooltip.url.copy": "",
|
|
17643
17574
|
"tooltip.url.open": "",
|
|
17644
17575
|
"ui.readLess": "",
|
|
@@ -17672,20 +17603,21 @@ var fr = {
|
|
|
17672
17603
|
"chart.type.line": "ligne",
|
|
17673
17604
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17674
17605
|
"chart.type.pie": "camembert",
|
|
17606
|
+
"dashboard.createRecord": "",
|
|
17675
17607
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17676
17608
|
"dashboard.records.all": "Catalogue",
|
|
17677
17609
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17678
17610
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17679
17611
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17680
17612
|
"dashboard.records.myRecords": "Mes fiches publiées",
|
|
17681
|
-
"dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
|
|
17682
|
-
"dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
|
|
17683
17613
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17684
17614
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17685
17615
|
"dashboard.records.userDetail": "Nom",
|
|
17686
17616
|
"dashboard.records.userEmail": "Email",
|
|
17687
17617
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17688
17618
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17619
|
+
"dashboard.results.listMetadata": "",
|
|
17620
|
+
"dashboard.results.listResources": "",
|
|
17689
17621
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17690
17622
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17691
17623
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17767,11 +17699,12 @@ var fr = {
|
|
|
17767
17699
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17768
17700
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17769
17701
|
"datahub.news.contact.contactus": "Contactez-nous",
|
|
17770
|
-
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont
|
|
17702
|
+
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont là pour vous répondre.</p>",
|
|
17771
17703
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17772
17704
|
"datahub.news.feed": "Fil d'activité",
|
|
17773
17705
|
"datahub.news.figures": "Quelques chiffres",
|
|
17774
|
-
"datahub.
|
|
17706
|
+
"datahub.record.addToFavorites": "Ajouter aux favoris",
|
|
17707
|
+
"datahub.search.back": "Retour",
|
|
17775
17708
|
"datahub.search.filter.all": "Tous",
|
|
17776
17709
|
"datahub.search.filter.generatedByWfs": "généré par une API",
|
|
17777
17710
|
"datahub.search.filter.others": "Autres",
|
|
@@ -17831,6 +17764,9 @@ var fr = {
|
|
|
17831
17764
|
"map.add.layer.file": "",
|
|
17832
17765
|
"map.add.layer.wfs": "",
|
|
17833
17766
|
"map.add.layer.wms": "",
|
|
17767
|
+
"map.addFromFile.placeholder": "",
|
|
17768
|
+
"map.geocoding.placeholder": "",
|
|
17769
|
+
"map.help.addFromFile": "",
|
|
17834
17770
|
"map.layer.add": "",
|
|
17835
17771
|
"map.layers.available": "",
|
|
17836
17772
|
"map.layers.list": "",
|
|
@@ -17838,6 +17774,7 @@ var fr = {
|
|
|
17838
17774
|
"map.loading.service": "",
|
|
17839
17775
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17840
17776
|
"map.select.layer": "Source de données",
|
|
17777
|
+
"map.wfs.urlInput.hint": "",
|
|
17841
17778
|
"map.wms.urlInput.hint": "",
|
|
17842
17779
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17843
17780
|
"nav.back": "Retour",
|
|
@@ -17872,15 +17809,16 @@ var fr = {
|
|
|
17872
17809
|
"record.metadata.author": "Auteur",
|
|
17873
17810
|
"record.metadata.catalog": "Catalogue",
|
|
17874
17811
|
"record.metadata.contact": "Contact",
|
|
17875
|
-
"record.metadata.
|
|
17876
|
-
"record.metadata.details": "Détails",
|
|
17812
|
+
"record.metadata.details": "Informations techniques",
|
|
17877
17813
|
"record.metadata.download": "Téléchargements",
|
|
17878
17814
|
"record.metadata.formats": "Formats",
|
|
17879
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17880
17815
|
"record.metadata.keywords": "Mots clés",
|
|
17816
|
+
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17881
17817
|
"record.metadata.links": "Liens",
|
|
17882
17818
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17883
17819
|
"record.metadata.origin": "À propos des données",
|
|
17820
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17821
|
+
"record.metadata.owner": "Catalogue d'origine",
|
|
17884
17822
|
"record.metadata.preview": "Aperçu",
|
|
17885
17823
|
"record.metadata.publications": "données",
|
|
17886
17824
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
@@ -17902,12 +17840,16 @@ var fr = {
|
|
|
17902
17840
|
"record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
|
|
17903
17841
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17904
17842
|
"record.metadata.related": "Voir aussi",
|
|
17905
|
-
"record.metadata.sheet": "
|
|
17843
|
+
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17844
|
+
"record.metadata.status": "",
|
|
17845
|
+
"record.metadata.themes": "Catégories",
|
|
17906
17846
|
"record.metadata.title": "Titre",
|
|
17847
|
+
"record.metadata.type": "Donnée géographique",
|
|
17848
|
+
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17907
17849
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17908
17850
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17909
17851
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17910
|
-
"record.metadata.usage": "
|
|
17852
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17911
17853
|
"record.more.details": "Détails",
|
|
17912
17854
|
"record.tab.chart": "Graphique",
|
|
17913
17855
|
"record.tab.data": "Tableau",
|
|
@@ -17937,6 +17879,7 @@ var fr = {
|
|
|
17937
17879
|
"search.filters.isSpatial": "Données spatiales",
|
|
17938
17880
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17939
17881
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
17882
|
+
"search.filters.keyword": "Mot-clé",
|
|
17940
17883
|
"search.filters.license": "Licence",
|
|
17941
17884
|
"search.filters.license.cc-by": "cc-by",
|
|
17942
17885
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -17967,6 +17910,7 @@ var fr = {
|
|
|
17967
17910
|
"table.object.count": "enregistrements dans ces données",
|
|
17968
17911
|
"table.select.data": "Source de données",
|
|
17969
17912
|
"tooltip.html.copy": "Copier le HTML",
|
|
17913
|
+
"tooltip.id.copy": "Copier l'identifiant unique",
|
|
17970
17914
|
"tooltip.url.copy": "Copier l'URL",
|
|
17971
17915
|
"tooltip.url.open": "Ouvrir l'URL",
|
|
17972
17916
|
"ui.readLess": "Réduire",
|
|
@@ -18000,20 +17944,21 @@ var it = {
|
|
|
18000
17944
|
"chart.type.line": "grafico a linee",
|
|
18001
17945
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
18002
17946
|
"chart.type.pie": "grafico a torta",
|
|
17947
|
+
"dashboard.createRecord": "",
|
|
18003
17948
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
18004
17949
|
"dashboard.records.all": "Catalogo",
|
|
18005
17950
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
18006
17951
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
18007
17952
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
18008
17953
|
"dashboard.records.myRecords": "I miei dati",
|
|
18009
|
-
"dashboard.records.noRecord": "Nessun dati per questa organizzazione",
|
|
18010
|
-
"dashboard.records.noUser": "Nessun utente per questa organizzazione",
|
|
18011
17954
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
18012
17955
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
18013
17956
|
"dashboard.records.userDetail": "Nome",
|
|
18014
17957
|
"dashboard.records.userEmail": "Email",
|
|
18015
17958
|
"dashboard.records.username": "Nome utente",
|
|
18016
17959
|
"dashboard.records.users": "utenti",
|
|
17960
|
+
"dashboard.results.listMetadata": "",
|
|
17961
|
+
"dashboard.results.listResources": "",
|
|
18017
17962
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18018
17963
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18019
17964
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18094,12 +18039,13 @@ var it = {
|
|
|
18094
18039
|
"datahub.header.organisations": "Organizzazioni",
|
|
18095
18040
|
"datahub.header.popularRecords": "Più popolari",
|
|
18096
18041
|
"datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
|
|
18097
|
-
"datahub.news.contact.contactus": "",
|
|
18098
|
-
"datahub.news.contact.html": "",
|
|
18099
|
-
"datahub.news.contact.title": "",
|
|
18042
|
+
"datahub.news.contact.contactus": "Contattateci",
|
|
18043
|
+
"datahub.news.contact.html": "<p>Ha bisogno di dati che non sono attualmente disponibili sulla piattaforma? </p><p> I nostri team sono qui per aiutarla.</p>",
|
|
18044
|
+
"datahub.news.contact.title": "Ha un bisogno specifico?",
|
|
18100
18045
|
"datahub.news.feed": "Feed di attività",
|
|
18101
18046
|
"datahub.news.figures": "Alcune figure",
|
|
18102
|
-
"datahub.
|
|
18047
|
+
"datahub.record.addToFavorites": "Aggiungere a miei preferiti",
|
|
18048
|
+
"datahub.search.back": "Ritorna",
|
|
18103
18049
|
"datahub.search.filter.all": "Tutti",
|
|
18104
18050
|
"datahub.search.filter.generatedByWfs": "generato da un'API",
|
|
18105
18051
|
"datahub.search.filter.others": "Altri",
|
|
@@ -18126,7 +18072,7 @@ var it = {
|
|
|
18126
18072
|
"downloads.format.unknown": "sconosciuto",
|
|
18127
18073
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18128
18074
|
dropFile: dropFile$2,
|
|
18129
|
-
"externalviewer.dataset.unnamed": "",
|
|
18075
|
+
"externalviewer.dataset.unnamed": "Layer del datahub",
|
|
18130
18076
|
"facets.block.title.OrgForResource": "Organizzazione",
|
|
18131
18077
|
"facets.block.title.availableInServices": "Disponibile per",
|
|
18132
18078
|
"facets.block.title.cl_hierarchyLevel.key": "Tipo di risorsa",
|
|
@@ -18159,6 +18105,9 @@ var it = {
|
|
|
18159
18105
|
"map.add.layer.file": "Da un file",
|
|
18160
18106
|
"map.add.layer.wfs": "Da un WFS",
|
|
18161
18107
|
"map.add.layer.wms": "Da un WMS",
|
|
18108
|
+
"map.addFromFile.placeholder": "",
|
|
18109
|
+
"map.geocoding.placeholder": "",
|
|
18110
|
+
"map.help.addFromFile": "",
|
|
18162
18111
|
"map.layer.add": "",
|
|
18163
18112
|
"map.layers.available": "",
|
|
18164
18113
|
"map.layers.list": "Layers",
|
|
@@ -18166,6 +18115,7 @@ var it = {
|
|
|
18166
18115
|
"map.loading.service": "",
|
|
18167
18116
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18168
18117
|
"map.select.layer": "Sorgente dati",
|
|
18118
|
+
"map.wfs.urlInput.hint": "",
|
|
18169
18119
|
"map.wms.urlInput.hint": "",
|
|
18170
18120
|
"multiselect.filter.placeholder": "Cerca",
|
|
18171
18121
|
"nav.back": "Indietro",
|
|
@@ -18200,15 +18150,16 @@ var it = {
|
|
|
18200
18150
|
"record.metadata.author": "Autore",
|
|
18201
18151
|
"record.metadata.catalog": "Catalogo",
|
|
18202
18152
|
"record.metadata.contact": "Contatto",
|
|
18203
|
-
"record.metadata.
|
|
18204
|
-
"record.metadata.details": "Dettagli",
|
|
18153
|
+
"record.metadata.details": "Informazioni tecniche",
|
|
18205
18154
|
"record.metadata.download": "Download",
|
|
18206
18155
|
"record.metadata.formats": "Formati",
|
|
18207
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18208
18156
|
"record.metadata.keywords": "Parole chiave",
|
|
18157
|
+
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18209
18158
|
"record.metadata.links": "Collegamenti",
|
|
18210
18159
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18211
18160
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18161
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18162
|
+
"record.metadata.owner": "Catalogo originale",
|
|
18212
18163
|
"record.metadata.preview": "Anteprima",
|
|
18213
18164
|
"record.metadata.publications": "pubblicazioni",
|
|
18214
18165
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -18230,12 +18181,16 @@ var it = {
|
|
|
18230
18181
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
18231
18182
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18232
18183
|
"record.metadata.related": "Vedi anche",
|
|
18233
|
-
"record.metadata.sheet": "
|
|
18184
|
+
"record.metadata.sheet": "Origine del metadata",
|
|
18185
|
+
"record.metadata.status": "",
|
|
18186
|
+
"record.metadata.themes": "Categorie",
|
|
18234
18187
|
"record.metadata.title": "Titolo",
|
|
18188
|
+
"record.metadata.type": "Dati geografici",
|
|
18189
|
+
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18235
18190
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18236
18191
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18237
18192
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18238
|
-
"record.metadata.usage": "
|
|
18193
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18239
18194
|
"record.more.details": "Dettagli",
|
|
18240
18195
|
"record.tab.chart": "Grafico",
|
|
18241
18196
|
"record.tab.data": "Tabella",
|
|
@@ -18243,10 +18198,10 @@ var it = {
|
|
|
18243
18198
|
"record.was.created.time": "ha creato questi dati {time}",
|
|
18244
18199
|
records: records$2,
|
|
18245
18200
|
"results.layout.selectOne": "Mostra risultati",
|
|
18246
|
-
"results.records.hits.displayedOn": "",
|
|
18201
|
+
"results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
|
|
18247
18202
|
"results.records.hits.empty.help.html": "Suggerimenti: <ul class='list-disc list-inside'><li>Prova con altre parole chiave</li><li>Cerca con meno parole</li></ul>",
|
|
18248
18203
|
"results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
|
|
18249
|
-
"results.records.hits.selected": "",
|
|
18204
|
+
"results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
|
|
18250
18205
|
"results.showMore": "Altri risultati...",
|
|
18251
18206
|
"results.sortBy.dateStamp": "Più recente",
|
|
18252
18207
|
"results.sortBy.popularity": "Popolarità",
|
|
@@ -18265,6 +18220,7 @@ var it = {
|
|
|
18265
18220
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18266
18221
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18267
18222
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18223
|
+
"search.filters.keyword": "Parola chiave",
|
|
18268
18224
|
"search.filters.license": "Licenza",
|
|
18269
18225
|
"search.filters.license.cc-by": "cc-by",
|
|
18270
18226
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18295,10 +18251,11 @@ var it = {
|
|
|
18295
18251
|
"table.object.count": "record in questi dati",
|
|
18296
18252
|
"table.select.data": "Sorgente dati",
|
|
18297
18253
|
"tooltip.html.copy": "Copiare il HTML",
|
|
18254
|
+
"tooltip.id.copy": "Copiare l'identificatore unico",
|
|
18298
18255
|
"tooltip.url.copy": "Copiare l'URL",
|
|
18299
18256
|
"tooltip.url.open": "Aprire l'URL",
|
|
18300
|
-
"ui.readLess": "",
|
|
18301
|
-
"ui.readMore": "",
|
|
18257
|
+
"ui.readLess": "Ridurre",
|
|
18258
|
+
"ui.readMore": "Leggi di più",
|
|
18302
18259
|
"wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
|
|
18303
18260
|
"wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
|
|
18304
18261
|
"wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
|
|
@@ -18328,20 +18285,21 @@ var nl = {
|
|
|
18328
18285
|
"chart.type.line": "lijndiagram",
|
|
18329
18286
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18330
18287
|
"chart.type.pie": "cirkeldiagram",
|
|
18288
|
+
"dashboard.createRecord": "",
|
|
18331
18289
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18332
18290
|
"dashboard.records.all": "Catalogus",
|
|
18333
18291
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18334
18292
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18335
18293
|
"dashboard.records.myOrg": "Organisatie",
|
|
18336
18294
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18337
|
-
"dashboard.records.noRecord": "",
|
|
18338
|
-
"dashboard.records.noUser": "",
|
|
18339
18295
|
"dashboard.records.publishedRecords": "",
|
|
18340
18296
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18341
18297
|
"dashboard.records.userDetail": "",
|
|
18342
18298
|
"dashboard.records.userEmail": "",
|
|
18343
18299
|
"dashboard.records.username": "",
|
|
18344
18300
|
"dashboard.records.users": "",
|
|
18301
|
+
"dashboard.results.listMetadata": "",
|
|
18302
|
+
"dashboard.results.listResources": "",
|
|
18345
18303
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18346
18304
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18347
18305
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18427,6 +18385,7 @@ var nl = {
|
|
|
18427
18385
|
"datahub.news.contact.title": "",
|
|
18428
18386
|
"datahub.news.feed": "",
|
|
18429
18387
|
"datahub.news.figures": "",
|
|
18388
|
+
"datahub.record.addToFavorites": "",
|
|
18430
18389
|
"datahub.search.back": "",
|
|
18431
18390
|
"datahub.search.filter.all": "",
|
|
18432
18391
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18487,6 +18446,9 @@ var nl = {
|
|
|
18487
18446
|
"map.add.layer.file": "",
|
|
18488
18447
|
"map.add.layer.wfs": "",
|
|
18489
18448
|
"map.add.layer.wms": "",
|
|
18449
|
+
"map.addFromFile.placeholder": "",
|
|
18450
|
+
"map.geocoding.placeholder": "",
|
|
18451
|
+
"map.help.addFromFile": "",
|
|
18490
18452
|
"map.layer.add": "",
|
|
18491
18453
|
"map.layers.available": "",
|
|
18492
18454
|
"map.layers.list": "",
|
|
@@ -18494,6 +18456,7 @@ var nl = {
|
|
|
18494
18456
|
"map.loading.service": "",
|
|
18495
18457
|
"map.navigation.message": "",
|
|
18496
18458
|
"map.select.layer": "",
|
|
18459
|
+
"map.wfs.urlInput.hint": "",
|
|
18497
18460
|
"map.wms.urlInput.hint": "",
|
|
18498
18461
|
"multiselect.filter.placeholder": "",
|
|
18499
18462
|
"nav.back": "",
|
|
@@ -18528,15 +18491,16 @@ var nl = {
|
|
|
18528
18491
|
"record.metadata.author": "",
|
|
18529
18492
|
"record.metadata.catalog": "",
|
|
18530
18493
|
"record.metadata.contact": "",
|
|
18531
|
-
"record.metadata.createdOn": "",
|
|
18532
18494
|
"record.metadata.details": "",
|
|
18533
18495
|
"record.metadata.download": "",
|
|
18534
18496
|
"record.metadata.formats": "",
|
|
18535
|
-
"record.metadata.isOpenData": "",
|
|
18536
18497
|
"record.metadata.keywords": "",
|
|
18498
|
+
"record.metadata.lastUpdate": "",
|
|
18537
18499
|
"record.metadata.links": "",
|
|
18538
18500
|
"record.metadata.noUsage": "",
|
|
18539
18501
|
"record.metadata.origin": "",
|
|
18502
|
+
"record.metadata.otherConstraints": "",
|
|
18503
|
+
"record.metadata.owner": "",
|
|
18540
18504
|
"record.metadata.preview": "",
|
|
18541
18505
|
"record.metadata.publications": "",
|
|
18542
18506
|
"record.metadata.quality": "",
|
|
@@ -18559,7 +18523,11 @@ var nl = {
|
|
|
18559
18523
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18560
18524
|
"record.metadata.related": "",
|
|
18561
18525
|
"record.metadata.sheet": "",
|
|
18526
|
+
"record.metadata.status": "",
|
|
18527
|
+
"record.metadata.themes": "",
|
|
18562
18528
|
"record.metadata.title": "",
|
|
18529
|
+
"record.metadata.type": "",
|
|
18530
|
+
"record.metadata.uniqueId": "",
|
|
18563
18531
|
"record.metadata.updateFrequency": "",
|
|
18564
18532
|
"record.metadata.updateStatus": "",
|
|
18565
18533
|
"record.metadata.updatedOn": "",
|
|
@@ -18593,6 +18561,7 @@ var nl = {
|
|
|
18593
18561
|
"search.filters.isSpatial": "",
|
|
18594
18562
|
"search.filters.isSpatial.no": "",
|
|
18595
18563
|
"search.filters.isSpatial.yes": "",
|
|
18564
|
+
"search.filters.keyword": "",
|
|
18596
18565
|
"search.filters.license": "",
|
|
18597
18566
|
"search.filters.license.cc-by": "",
|
|
18598
18567
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18623,6 +18592,7 @@ var nl = {
|
|
|
18623
18592
|
"table.object.count": "",
|
|
18624
18593
|
"table.select.data": "",
|
|
18625
18594
|
"tooltip.html.copy": "",
|
|
18595
|
+
"tooltip.id.copy": "",
|
|
18626
18596
|
"tooltip.url.copy": "",
|
|
18627
18597
|
"tooltip.url.open": "",
|
|
18628
18598
|
"ui.readLess": "",
|
|
@@ -18656,20 +18626,21 @@ var pt = {
|
|
|
18656
18626
|
"chart.type.line": "gráfico de linha",
|
|
18657
18627
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18658
18628
|
"chart.type.pie": "gráfico de pizza",
|
|
18629
|
+
"dashboard.createRecord": "",
|
|
18659
18630
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18660
18631
|
"dashboard.records.all": "Catálogo",
|
|
18661
18632
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18662
18633
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18663
18634
|
"dashboard.records.myOrg": "Organização",
|
|
18664
18635
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18665
|
-
"dashboard.records.noRecord": "",
|
|
18666
|
-
"dashboard.records.noUser": "",
|
|
18667
18636
|
"dashboard.records.publishedRecords": "",
|
|
18668
18637
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18669
18638
|
"dashboard.records.userDetail": "",
|
|
18670
18639
|
"dashboard.records.userEmail": "",
|
|
18671
18640
|
"dashboard.records.username": "",
|
|
18672
18641
|
"dashboard.records.users": "",
|
|
18642
|
+
"dashboard.results.listMetadata": "",
|
|
18643
|
+
"dashboard.results.listResources": "",
|
|
18673
18644
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18674
18645
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18675
18646
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18755,6 +18726,7 @@ var pt = {
|
|
|
18755
18726
|
"datahub.news.contact.title": "",
|
|
18756
18727
|
"datahub.news.feed": "",
|
|
18757
18728
|
"datahub.news.figures": "",
|
|
18729
|
+
"datahub.record.addToFavorites": "",
|
|
18758
18730
|
"datahub.search.back": "",
|
|
18759
18731
|
"datahub.search.filter.all": "",
|
|
18760
18732
|
"datahub.search.filter.generatedByWfs": "",
|
|
@@ -18815,6 +18787,9 @@ var pt = {
|
|
|
18815
18787
|
"map.add.layer.file": "",
|
|
18816
18788
|
"map.add.layer.wfs": "",
|
|
18817
18789
|
"map.add.layer.wms": "",
|
|
18790
|
+
"map.addFromFile.placeholder": "",
|
|
18791
|
+
"map.geocoding.placeholder": "",
|
|
18792
|
+
"map.help.addFromFile": "",
|
|
18818
18793
|
"map.layer.add": "",
|
|
18819
18794
|
"map.layers.available": "",
|
|
18820
18795
|
"map.layers.list": "",
|
|
@@ -18822,6 +18797,7 @@ var pt = {
|
|
|
18822
18797
|
"map.loading.service": "",
|
|
18823
18798
|
"map.navigation.message": "",
|
|
18824
18799
|
"map.select.layer": "",
|
|
18800
|
+
"map.wfs.urlInput.hint": "",
|
|
18825
18801
|
"map.wms.urlInput.hint": "",
|
|
18826
18802
|
"multiselect.filter.placeholder": "",
|
|
18827
18803
|
"nav.back": "",
|
|
@@ -18856,15 +18832,16 @@ var pt = {
|
|
|
18856
18832
|
"record.metadata.author": "",
|
|
18857
18833
|
"record.metadata.catalog": "",
|
|
18858
18834
|
"record.metadata.contact": "",
|
|
18859
|
-
"record.metadata.createdOn": "",
|
|
18860
18835
|
"record.metadata.details": "",
|
|
18861
18836
|
"record.metadata.download": "",
|
|
18862
18837
|
"record.metadata.formats": "",
|
|
18863
|
-
"record.metadata.isOpenData": "",
|
|
18864
18838
|
"record.metadata.keywords": "",
|
|
18839
|
+
"record.metadata.lastUpdate": "",
|
|
18865
18840
|
"record.metadata.links": "",
|
|
18866
18841
|
"record.metadata.noUsage": "",
|
|
18867
18842
|
"record.metadata.origin": "",
|
|
18843
|
+
"record.metadata.otherConstraints": "",
|
|
18844
|
+
"record.metadata.owner": "",
|
|
18868
18845
|
"record.metadata.preview": "",
|
|
18869
18846
|
"record.metadata.publications": "",
|
|
18870
18847
|
"record.metadata.quality": "",
|
|
@@ -18887,7 +18864,11 @@ var pt = {
|
|
|
18887
18864
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18888
18865
|
"record.metadata.related": "",
|
|
18889
18866
|
"record.metadata.sheet": "",
|
|
18867
|
+
"record.metadata.status": "",
|
|
18868
|
+
"record.metadata.themes": "",
|
|
18890
18869
|
"record.metadata.title": "",
|
|
18870
|
+
"record.metadata.type": "",
|
|
18871
|
+
"record.metadata.uniqueId": "",
|
|
18891
18872
|
"record.metadata.updateFrequency": "",
|
|
18892
18873
|
"record.metadata.updateStatus": "",
|
|
18893
18874
|
"record.metadata.updatedOn": "",
|
|
@@ -18921,6 +18902,7 @@ var pt = {
|
|
|
18921
18902
|
"search.filters.isSpatial": "",
|
|
18922
18903
|
"search.filters.isSpatial.no": "",
|
|
18923
18904
|
"search.filters.isSpatial.yes": "",
|
|
18905
|
+
"search.filters.keyword": "",
|
|
18924
18906
|
"search.filters.license": "",
|
|
18925
18907
|
"search.filters.license.cc-by": "",
|
|
18926
18908
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18951,6 +18933,7 @@ var pt = {
|
|
|
18951
18933
|
"table.object.count": "",
|
|
18952
18934
|
"table.select.data": "",
|
|
18953
18935
|
"tooltip.html.copy": "",
|
|
18936
|
+
"tooltip.id.copy": "",
|
|
18954
18937
|
"tooltip.url.copy": "",
|
|
18955
18938
|
"tooltip.url.open": "",
|
|
18956
18939
|
"ui.readLess": "",
|
|
@@ -19095,20 +19078,11 @@ class Gn4FieldMapper {
|
|
|
19095
19078
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19096
19079
|
],
|
|
19097
19080
|
}),
|
|
19098
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19099
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19100
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19101
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19102
|
-
licenseObject: (output, source) => (
|
|
19103
|
-
...output,
|
|
19104
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19105
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19106
|
-
return {
|
|
19107
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19108
|
-
...(link ? { link } : {}),
|
|
19109
|
-
};
|
|
19110
|
-
}),
|
|
19111
|
-
}),
|
|
19081
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19082
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19083
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19084
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19085
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19112
19086
|
lineageObject: (output, source) => ({
|
|
19113
19087
|
...output,
|
|
19114
19088
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19134,33 +19108,78 @@ class Gn4FieldMapper {
|
|
|
19134
19108
|
kind,
|
|
19135
19109
|
};
|
|
19136
19110
|
},
|
|
19111
|
+
geom: (output, source) => {
|
|
19112
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19113
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19114
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19115
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19116
|
+
return {
|
|
19117
|
+
...output,
|
|
19118
|
+
spatialExtents: [
|
|
19119
|
+
...spatialExtents,
|
|
19120
|
+
...geoms.map((geom, index) => {
|
|
19121
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19122
|
+
const geometry = shapes[index] ?? geom;
|
|
19123
|
+
return {
|
|
19124
|
+
...(description !== null ? { description } : null),
|
|
19125
|
+
geometry,
|
|
19126
|
+
};
|
|
19127
|
+
}),
|
|
19128
|
+
],
|
|
19129
|
+
};
|
|
19130
|
+
},
|
|
19131
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19132
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19133
|
+
return {
|
|
19134
|
+
...output,
|
|
19135
|
+
temporalExtents: ranges.map((range) => {
|
|
19136
|
+
const start = selectField(range, 'gte');
|
|
19137
|
+
const end = selectField(range, 'lte');
|
|
19138
|
+
return {
|
|
19139
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19140
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19141
|
+
};
|
|
19142
|
+
}),
|
|
19143
|
+
};
|
|
19144
|
+
},
|
|
19137
19145
|
};
|
|
19138
19146
|
this.genericField = (output) => output;
|
|
19139
|
-
this.constraintField = (
|
|
19140
|
-
|
|
19141
|
-
|
|
19142
|
-
|
|
19143
|
-
|
|
19144
|
-
|
|
19145
|
-
|
|
19146
|
-
|
|
19147
|
-
|
|
19148
|
-
|
|
19149
|
-
|
|
19150
|
-
|
|
19151
|
-
|
|
19152
|
-
|
|
19153
|
-
|
|
19154
|
-
|
|
19155
|
-
|
|
19156
|
-
|
|
19157
|
-
|
|
19158
|
-
|
|
19159
|
-
|
|
19160
|
-
|
|
19161
|
-
|
|
19162
|
-
}
|
|
19163
|
-
|
|
19147
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19148
|
+
let outputField;
|
|
19149
|
+
switch (type) {
|
|
19150
|
+
case 'license':
|
|
19151
|
+
outputField = 'licenses';
|
|
19152
|
+
break;
|
|
19153
|
+
case 'legal':
|
|
19154
|
+
outputField = 'legalConstraints';
|
|
19155
|
+
break;
|
|
19156
|
+
case 'security':
|
|
19157
|
+
outputField = 'securityConstraints';
|
|
19158
|
+
break;
|
|
19159
|
+
case 'other':
|
|
19160
|
+
outputField = 'otherConstraints';
|
|
19161
|
+
break;
|
|
19162
|
+
}
|
|
19163
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19164
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19165
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19166
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19167
|
+
return {
|
|
19168
|
+
text,
|
|
19169
|
+
...(url ? { url } : {}),
|
|
19170
|
+
};
|
|
19171
|
+
}));
|
|
19172
|
+
const result = {
|
|
19173
|
+
...output,
|
|
19174
|
+
[outputField]: outputArray,
|
|
19175
|
+
};
|
|
19176
|
+
// avoid legal constraints being duplicates of licenses
|
|
19177
|
+
if ('legalConstraints' in result &&
|
|
19178
|
+
(type === 'legal' || type === 'license')) {
|
|
19179
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19180
|
+
}
|
|
19181
|
+
return result;
|
|
19182
|
+
};
|
|
19164
19183
|
this.mapLink = (sourceLink) => {
|
|
19165
19184
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19166
19185
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19208,17 +19227,6 @@ class Gn4FieldMapper {
|
|
|
19208
19227
|
extras: { ...(output.extras || {}), ...value },
|
|
19209
19228
|
});
|
|
19210
19229
|
}
|
|
19211
|
-
getConstraintsType(indexField) {
|
|
19212
|
-
switch (indexField) {
|
|
19213
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19214
|
-
return 'legal';
|
|
19215
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19216
|
-
return 'security';
|
|
19217
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19218
|
-
default:
|
|
19219
|
-
return 'other';
|
|
19220
|
-
}
|
|
19221
|
-
}
|
|
19222
19230
|
getMappingFn(fieldName) {
|
|
19223
19231
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19224
19232
|
}
|
|
@@ -19280,14 +19288,16 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19280
19288
|
recordUpdated: null,
|
|
19281
19289
|
ownerOrganization: null,
|
|
19282
19290
|
licenses: [],
|
|
19291
|
+
legalConstraints: [],
|
|
19292
|
+
securityConstraints: [],
|
|
19293
|
+
otherConstraints: [],
|
|
19283
19294
|
contacts: [],
|
|
19284
19295
|
contactsForResource: [],
|
|
19285
|
-
accessConstraints: [],
|
|
19286
19296
|
keywords: [],
|
|
19287
19297
|
themes: [],
|
|
19288
|
-
useLimitations: [],
|
|
19289
19298
|
spatialExtents: [],
|
|
19290
19299
|
temporalExtents: [],
|
|
19300
|
+
overviews: [],
|
|
19291
19301
|
};
|
|
19292
19302
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19293
19303
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -20052,11 +20062,18 @@ class OrganizationsFromMetadataService {
|
|
|
20052
20062
|
if (!allContactOrgs.length)
|
|
20053
20063
|
return of(record);
|
|
20054
20064
|
const ownerOrganization = allContactOrgs[0];
|
|
20055
|
-
|
|
20065
|
+
// read the owner group as well to have a fallback logo
|
|
20066
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20067
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20068
|
+
return group.id === Number(groupId);
|
|
20069
|
+
})));
|
|
20070
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20056
20071
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20072
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20057
20073
|
return {
|
|
20058
20074
|
...record,
|
|
20059
20075
|
ownerOrganization: {
|
|
20076
|
+
logoUrl,
|
|
20060
20077
|
...ownerOrganization,
|
|
20061
20078
|
...recordOrganisation,
|
|
20062
20079
|
},
|
|
@@ -20321,36 +20338,23 @@ class SelectionService {
|
|
|
20321
20338
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20322
20339
|
}
|
|
20323
20340
|
selectRecords(records) {
|
|
20324
|
-
const newIds =
|
|
20325
|
-
|
|
20326
|
-
newIds.push(record.uniqueIdentifier);
|
|
20327
|
-
});
|
|
20328
|
-
const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
|
|
20329
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20341
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20342
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20330
20343
|
this.addIdsToSelected(newIds);
|
|
20331
|
-
})
|
|
20344
|
+
});
|
|
20332
20345
|
}
|
|
20333
20346
|
deselectRecords(records) {
|
|
20334
|
-
const idsToBeRemoved =
|
|
20335
|
-
|
|
20336
|
-
idsToBeRemoved.push(record.uniqueIdentifier);
|
|
20337
|
-
});
|
|
20338
|
-
const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
|
|
20339
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20347
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20348
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20340
20349
|
this.removeIdsFromSelected(idsToBeRemoved);
|
|
20341
|
-
}), map$2(() => undefined));
|
|
20342
|
-
}
|
|
20343
|
-
clearSelection() {
|
|
20344
|
-
const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
|
|
20345
|
-
let currentSelection;
|
|
20346
|
-
this.subscription = currentSelectedResponse.subscribe((value) => {
|
|
20347
|
-
currentSelection = [...value];
|
|
20348
20350
|
});
|
|
20349
|
-
|
|
20350
|
-
|
|
20351
|
-
|
|
20351
|
+
}
|
|
20352
|
+
async clearSelection() {
|
|
20353
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20354
|
+
const currentSelection = Array.from(response);
|
|
20355
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20352
20356
|
this.removeIdsFromSelected(currentSelection);
|
|
20353
|
-
})
|
|
20357
|
+
});
|
|
20354
20358
|
}
|
|
20355
20359
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20356
20360
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20380,12 +20384,21 @@ class Gn4PlatformMapper {
|
|
|
20380
20384
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20381
20385
|
return { ...apiUser, id: id.toString() };
|
|
20382
20386
|
}
|
|
20383
|
-
thesaurusFromApi(thesaurus) {
|
|
20387
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20384
20388
|
return thesaurus.map((keyword) => {
|
|
20385
|
-
|
|
20389
|
+
let key = keyword.uri;
|
|
20390
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20391
|
+
if (key.indexOf('@@@') > -1) {
|
|
20392
|
+
key = key.split('@@@')[1];
|
|
20393
|
+
}
|
|
20394
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20395
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20396
|
+
? keyword.definitions[lang3]
|
|
20397
|
+
: keyword.definition;
|
|
20386
20398
|
return {
|
|
20387
|
-
key
|
|
20388
|
-
label
|
|
20399
|
+
key,
|
|
20400
|
+
label,
|
|
20401
|
+
description,
|
|
20389
20402
|
};
|
|
20390
20403
|
});
|
|
20391
20404
|
}
|
|
@@ -20398,13 +20411,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20398
20411
|
|
|
20399
20412
|
const minApiVersion = '4.2.2';
|
|
20400
20413
|
class Gn4PlatformService {
|
|
20401
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20414
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20402
20415
|
this.siteApiService = siteApiService;
|
|
20403
20416
|
this.meApi = meApi;
|
|
20404
20417
|
this.usersApi = usersApi;
|
|
20405
20418
|
this.mapper = mapper;
|
|
20406
20419
|
this.toolsApiService = toolsApiService;
|
|
20407
20420
|
this.registriesApiService = registriesApiService;
|
|
20421
|
+
this.langService = langService;
|
|
20408
20422
|
this.type = 'GeoNetwork';
|
|
20409
20423
|
this.keyTranslations$ = this.toolsApiService
|
|
20410
20424
|
.getTranslationsPackage1('gnui')
|
|
@@ -20418,6 +20432,11 @@ class Gn4PlatformService {
|
|
|
20418
20432
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20419
20433
|
}
|
|
20420
20434
|
}), shareReplay(1));
|
|
20435
|
+
/**
|
|
20436
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20437
|
+
* @private
|
|
20438
|
+
*/
|
|
20439
|
+
this.thesauri = {};
|
|
20421
20440
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20422
20441
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20423
20442
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20444,19 +20463,36 @@ class Gn4PlatformService {
|
|
|
20444
20463
|
return this.users$;
|
|
20445
20464
|
}
|
|
20446
20465
|
translateKey(key) {
|
|
20466
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20467
|
+
if (key.match(/^https?:\/\//)) {
|
|
20468
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20469
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20470
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20471
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20472
|
+
for (const item of thesaurus) {
|
|
20473
|
+
if (item.key === key)
|
|
20474
|
+
return item.label;
|
|
20475
|
+
}
|
|
20476
|
+
return key;
|
|
20477
|
+
}));
|
|
20478
|
+
}
|
|
20447
20479
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20448
20480
|
}
|
|
20449
|
-
|
|
20450
|
-
|
|
20451
|
-
.
|
|
20452
|
-
|
|
20481
|
+
getThesaurusByUri(uri) {
|
|
20482
|
+
if (this.thesauri[uri]) {
|
|
20483
|
+
return this.thesauri[uri];
|
|
20484
|
+
}
|
|
20485
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20486
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20487
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20488
|
+
return this.thesauri[uri];
|
|
20453
20489
|
}
|
|
20454
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20490
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20455
20491
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20456
20492
|
}
|
|
20457
20493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20458
20494
|
type: Injectable
|
|
20459
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20495
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20460
20496
|
|
|
20461
20497
|
function provideGn4() {
|
|
20462
20498
|
return [
|
|
@@ -20668,6 +20704,8 @@ const defaultMapOptions = {
|
|
|
20668
20704
|
};
|
|
20669
20705
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20670
20706
|
|
|
20707
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20708
|
+
|
|
20671
20709
|
var MapContextLayerTypeEnum;
|
|
20672
20710
|
(function (MapContextLayerTypeEnum) {
|
|
20673
20711
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -21043,9 +21081,15 @@ const FORMATS = {
|
|
|
21043
21081
|
color: '#328556',
|
|
21044
21082
|
mimeTypes: ['x-gis/x-shapefile'],
|
|
21045
21083
|
},
|
|
21084
|
+
gml: {
|
|
21085
|
+
extensions: ['gml'],
|
|
21086
|
+
priority: 5,
|
|
21087
|
+
color: '#c92bce',
|
|
21088
|
+
mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
|
|
21089
|
+
},
|
|
21046
21090
|
kml: {
|
|
21047
21091
|
extensions: ['kml', 'kmz'],
|
|
21048
|
-
priority:
|
|
21092
|
+
priority: 6,
|
|
21049
21093
|
color: '#348009',
|
|
21050
21094
|
mimeTypes: [
|
|
21051
21095
|
'application/vnd.google-earth.kml+xml',
|
|
@@ -21054,34 +21098,40 @@ const FORMATS = {
|
|
|
21054
21098
|
},
|
|
21055
21099
|
gpkg: {
|
|
21056
21100
|
extensions: ['gpkg', 'geopackage'],
|
|
21057
|
-
priority:
|
|
21101
|
+
priority: 7,
|
|
21058
21102
|
color: '#ea79ba',
|
|
21059
21103
|
mimeTypes: ['application/geopackage+sqlite3'],
|
|
21060
21104
|
},
|
|
21061
21105
|
zip: {
|
|
21062
21106
|
extensions: ['zip', 'tar.gz'],
|
|
21063
|
-
priority:
|
|
21107
|
+
priority: 8,
|
|
21064
21108
|
color: '#f2bb3a',
|
|
21065
21109
|
mimeTypes: ['application/zip', 'application/x-zip'],
|
|
21066
21110
|
},
|
|
21067
21111
|
pdf: {
|
|
21068
21112
|
extensions: ['pdf'],
|
|
21069
|
-
priority:
|
|
21113
|
+
priority: 9,
|
|
21070
21114
|
color: '#db544a',
|
|
21071
21115
|
mimeTypes: ['application/pdf'],
|
|
21072
21116
|
},
|
|
21073
21117
|
jpg: {
|
|
21074
21118
|
extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
|
|
21075
|
-
priority:
|
|
21119
|
+
priority: 9,
|
|
21076
21120
|
color: '#673ab7',
|
|
21077
21121
|
mimeTypes: ['image/jpg'],
|
|
21078
21122
|
},
|
|
21079
21123
|
svg: {
|
|
21080
21124
|
extensions: ['svg'],
|
|
21081
|
-
priority:
|
|
21125
|
+
priority: 10,
|
|
21082
21126
|
color: '#d98294',
|
|
21083
21127
|
mimeTypes: ['image/svg+xml'],
|
|
21084
21128
|
},
|
|
21129
|
+
dxf: {
|
|
21130
|
+
extensions: ['dxf'],
|
|
21131
|
+
priority: 11,
|
|
21132
|
+
color: '#de630b',
|
|
21133
|
+
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
21134
|
+
},
|
|
21085
21135
|
};
|
|
21086
21136
|
function getFormatPriority(linkFormat) {
|
|
21087
21137
|
for (const format in FORMATS) {
|
|
@@ -21098,14 +21148,18 @@ function getFormatPriority(linkFormat) {
|
|
|
21098
21148
|
function getLinkPriority(link) {
|
|
21099
21149
|
return getFormatPriority(getFileFormat(link));
|
|
21100
21150
|
}
|
|
21101
|
-
function
|
|
21102
|
-
|
|
21103
|
-
|
|
21104
|
-
|
|
21105
|
-
|
|
21151
|
+
function getFileFormatFromServiceOutput(serviceOutput) {
|
|
21152
|
+
function formatMatcher(format) {
|
|
21153
|
+
const output = serviceOutput.toLowerCase();
|
|
21154
|
+
return (format.extensions.some((extension) => output.includes(extension)) ||
|
|
21155
|
+
format.mimeTypes.some((mimeType) => output.includes(mimeType)));
|
|
21156
|
+
}
|
|
21157
|
+
for (const formatName in FORMATS) {
|
|
21158
|
+
if (formatMatcher(FORMATS[formatName])) {
|
|
21159
|
+
return formatName;
|
|
21106
21160
|
}
|
|
21107
21161
|
}
|
|
21108
|
-
return
|
|
21162
|
+
return null;
|
|
21109
21163
|
}
|
|
21110
21164
|
function getFileFormat(link) {
|
|
21111
21165
|
if ('mimeType' in link) {
|
|
@@ -21246,72 +21300,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21246
21300
|
}]
|
|
21247
21301
|
}] });
|
|
21248
21302
|
|
|
21249
|
-
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
21250
|
-
|
|
21251
|
-
class MapUtilsWMSService {
|
|
21252
|
-
constructor(proxy) {
|
|
21253
|
-
this.proxy = proxy;
|
|
21254
|
-
}
|
|
21255
|
-
getCapabilities(layer) {
|
|
21256
|
-
return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
|
|
21257
|
-
}
|
|
21258
|
-
getLayerFull(layer) {
|
|
21259
|
-
return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
|
|
21260
|
-
}
|
|
21261
|
-
getLayerLonLatBBox(layer) {
|
|
21262
|
-
return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
|
|
21263
|
-
}
|
|
21264
|
-
async getLonLatBBox(wmsLayerFull) {
|
|
21265
|
-
const { boundingBoxes } = wmsLayerFull;
|
|
21266
|
-
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21267
|
-
if (lonLatCRS) {
|
|
21268
|
-
return boundingBoxes[lonLatCRS];
|
|
21269
|
-
}
|
|
21270
|
-
else {
|
|
21271
|
-
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21272
|
-
register(proj4);
|
|
21273
|
-
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21274
|
-
proj4.defs(availableEPSGCode, proj);
|
|
21275
|
-
const bboxWithFiniteNumbers = [
|
|
21276
|
-
parseFloat(boundingBoxes[availableEPSGCode][0]),
|
|
21277
|
-
parseFloat(boundingBoxes[availableEPSGCode][1]),
|
|
21278
|
-
parseFloat(boundingBoxes[availableEPSGCode][2]),
|
|
21279
|
-
parseFloat(boundingBoxes[availableEPSGCode][3]),
|
|
21280
|
-
];
|
|
21281
|
-
const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21282
|
-
return extent;
|
|
21283
|
-
}
|
|
21284
|
-
}
|
|
21285
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21286
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
|
|
21287
|
-
}
|
|
21288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
|
|
21289
|
-
type: Injectable,
|
|
21290
|
-
args: [{
|
|
21291
|
-
providedIn: 'root',
|
|
21292
|
-
}]
|
|
21293
|
-
}], ctorParameters: function () { return [{ type: ProxyService }]; } });
|
|
21294
|
-
|
|
21295
21303
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21296
21304
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21305
|
+
const GEOJSON = new GeoJSON();
|
|
21297
21306
|
class MapUtilsService {
|
|
21298
|
-
constructor(http,
|
|
21307
|
+
constructor(http, proxy) {
|
|
21299
21308
|
this.http = http;
|
|
21300
|
-
this.
|
|
21309
|
+
this.proxy = proxy;
|
|
21301
21310
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21302
|
-
|
|
21311
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21303
21312
|
featureProjection,
|
|
21304
21313
|
dataProjection,
|
|
21305
21314
|
});
|
|
21306
|
-
return olFeatures;
|
|
21307
21315
|
};
|
|
21308
21316
|
}
|
|
21309
21317
|
createEmptyMap() {
|
|
21310
|
-
|
|
21318
|
+
return new Map$1({
|
|
21311
21319
|
controls: [],
|
|
21312
21320
|
pixelRatio: 1,
|
|
21313
21321
|
});
|
|
21314
|
-
return map;
|
|
21315
21322
|
}
|
|
21316
21323
|
isWMSLayer(layer) {
|
|
21317
21324
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21326,8 +21333,7 @@ class MapUtilsService {
|
|
|
21326
21333
|
...source.getParams(),
|
|
21327
21334
|
INFO_FORMAT: 'application/json',
|
|
21328
21335
|
};
|
|
21329
|
-
|
|
21330
|
-
return url;
|
|
21336
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21331
21337
|
}
|
|
21332
21338
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21333
21339
|
const features = [];
|
|
@@ -21355,38 +21361,56 @@ class MapUtilsService {
|
|
|
21355
21361
|
/**
|
|
21356
21362
|
* Will emit `null` if no extent could be computed
|
|
21357
21363
|
*/
|
|
21358
|
-
getLayerExtent(layer) {
|
|
21359
|
-
let
|
|
21364
|
+
async getLayerExtent(layer) {
|
|
21365
|
+
let latLonExtent;
|
|
21360
21366
|
if (layer &&
|
|
21361
21367
|
layer.type === 'geojson' &&
|
|
21362
21368
|
'data' in layer &&
|
|
21363
21369
|
typeof layer.data === 'object' &&
|
|
21364
21370
|
layer.data.features[0] &&
|
|
21365
21371
|
layer.data.features[0].geometry) {
|
|
21366
|
-
|
|
21367
|
-
.readFeatures(
|
|
21372
|
+
latLonExtent = new GeoJSON()
|
|
21373
|
+
.readFeatures(layer.data)
|
|
21368
21374
|
.map((feature) => feature.getGeometry())
|
|
21369
21375
|
.filter((geom) => !!geom)
|
|
21370
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21376
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21371
21377
|
}
|
|
21372
21378
|
else if (layer && layer.type === 'wms') {
|
|
21373
|
-
|
|
21379
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21374
21380
|
}
|
|
21375
21381
|
else if (layer && layer.type === 'wmts') {
|
|
21376
21382
|
if (layer.extent) {
|
|
21377
|
-
|
|
21383
|
+
latLonExtent = layer.extent;
|
|
21378
21384
|
}
|
|
21379
21385
|
else {
|
|
21380
|
-
return
|
|
21386
|
+
return layer.options.tileGrid.getExtent();
|
|
21381
21387
|
}
|
|
21382
21388
|
}
|
|
21383
21389
|
else {
|
|
21384
|
-
return
|
|
21390
|
+
return null;
|
|
21391
|
+
}
|
|
21392
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21393
|
+
return null;
|
|
21394
|
+
}
|
|
21395
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21396
|
+
}
|
|
21397
|
+
async getWmsLayerExtent(layer) {
|
|
21398
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21399
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21400
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21401
|
+
return null;
|
|
21402
|
+
}
|
|
21403
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21404
|
+
if (lonLatCRS) {
|
|
21405
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21406
|
+
}
|
|
21407
|
+
else {
|
|
21408
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21409
|
+
register(proj4);
|
|
21410
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21411
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21412
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21385
21413
|
}
|
|
21386
|
-
return geographicExtent.pipe(map$1((extent) => [
|
|
21387
|
-
...fromLonLat([extent[0], extent[1]], 'EPSG:3857'),
|
|
21388
|
-
...fromLonLat([extent[2], extent[3]], 'EPSG:3857'),
|
|
21389
|
-
]), map$1((extent) => (isEmpty(extent) ? null : extent)));
|
|
21390
21414
|
}
|
|
21391
21415
|
getWmtsLayerFromCapabilities(link) {
|
|
21392
21416
|
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
@@ -21442,7 +21466,18 @@ ${e.stack || e.message || e}`);
|
|
|
21442
21466
|
])
|
|
21443
21467
|
.getArray());
|
|
21444
21468
|
}
|
|
21445
|
-
|
|
21469
|
+
getRecordExtent(record) {
|
|
21470
|
+
if (!('spatialExtents' in record)) {
|
|
21471
|
+
return null;
|
|
21472
|
+
}
|
|
21473
|
+
// transform an array of geojson geometries into a bbox
|
|
21474
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21475
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21476
|
+
return extend(prev, geom.getExtent());
|
|
21477
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21478
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21479
|
+
}
|
|
21480
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21446
21481
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21447
21482
|
}
|
|
21448
21483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21450,7 +21485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21450
21485
|
args: [{
|
|
21451
21486
|
providedIn: 'root',
|
|
21452
21487
|
}]
|
|
21453
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21488
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21454
21489
|
function dragPanCondition(event) {
|
|
21455
21490
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21456
21491
|
if (!dragPanCondition) {
|
|
@@ -22525,6 +22560,7 @@ const DEFAULT_VIEW = {
|
|
|
22525
22560
|
center: [0, 15],
|
|
22526
22561
|
zoom: 2,
|
|
22527
22562
|
};
|
|
22563
|
+
const WFS_MAX_FEATURES = 10000;
|
|
22528
22564
|
class MapContextService {
|
|
22529
22565
|
constructor(mapUtils, styleService) {
|
|
22530
22566
|
this.mapUtils = mapUtils;
|
|
@@ -22534,6 +22570,9 @@ class MapContextService {
|
|
|
22534
22570
|
if (mapConfig) {
|
|
22535
22571
|
mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
|
|
22536
22572
|
}
|
|
22573
|
+
else {
|
|
22574
|
+
mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
|
|
22575
|
+
}
|
|
22537
22576
|
if (!mapContext.view?.extent &&
|
|
22538
22577
|
(!mapContext.view?.center || !mapContext.view?.zoom)) {
|
|
22539
22578
|
mapContext.view = this.getFallbackView(mapConfig);
|
|
@@ -22583,6 +22622,7 @@ class MapContextService {
|
|
|
22583
22622
|
urlObj.searchParams.set('typename', layerModel.name);
|
|
22584
22623
|
urlObj.searchParams.set('srsname', 'EPSG:3857');
|
|
22585
22624
|
urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
|
|
22625
|
+
urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
|
|
22586
22626
|
return urlObj.toString();
|
|
22587
22627
|
},
|
|
22588
22628
|
strategy: bbox,
|
|
@@ -22643,6 +22683,11 @@ class MapContextService {
|
|
|
22643
22683
|
}
|
|
22644
22684
|
return view;
|
|
22645
22685
|
}
|
|
22686
|
+
addDefaultBaselayerContext(layers) {
|
|
22687
|
+
return layers.includes(DEFAULT_BASELAYER_CONTEXT)
|
|
22688
|
+
? layers
|
|
22689
|
+
: [DEFAULT_BASELAYER_CONTEXT, ...layers];
|
|
22690
|
+
}
|
|
22646
22691
|
mergeMapConfigWithContext(mapContext, mapConfig) {
|
|
22647
22692
|
return {
|
|
22648
22693
|
...mapContext,
|
|
@@ -23130,6 +23175,7 @@ class ThumbnailComponent {
|
|
|
23130
23175
|
constructor(optionalPlaceholderUrl) {
|
|
23131
23176
|
this.optionalPlaceholderUrl = optionalPlaceholderUrl;
|
|
23132
23177
|
this.fit = 'cover';
|
|
23178
|
+
this.placeholderShown = new EventEmitter();
|
|
23133
23179
|
this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
|
|
23134
23180
|
this.images = [];
|
|
23135
23181
|
}
|
|
@@ -23165,6 +23211,7 @@ class ThumbnailComponent {
|
|
|
23165
23211
|
setNewSrcImage(image) {
|
|
23166
23212
|
this.imgFit = image.fit;
|
|
23167
23213
|
this.imgUrl = image.url;
|
|
23214
|
+
this.placeholderShown.emit(this.isPlaceholder);
|
|
23168
23215
|
}
|
|
23169
23216
|
setPlaceholder() {
|
|
23170
23217
|
this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
|
|
@@ -23187,7 +23234,7 @@ class ThumbnailComponent {
|
|
|
23187
23234
|
}
|
|
23188
23235
|
}
|
|
23189
23236
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23190
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23237
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23191
23238
|
}
|
|
23192
23239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23193
23240
|
type: Component,
|
|
@@ -23207,11 +23254,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23207
23254
|
}], containerElement: [{
|
|
23208
23255
|
type: ViewChild,
|
|
23209
23256
|
args: ['containerElement']
|
|
23257
|
+
}], placeholderShown: [{
|
|
23258
|
+
type: Output
|
|
23210
23259
|
}] } });
|
|
23211
23260
|
|
|
23212
23261
|
class RecordPreviewCardComponent extends RecordPreviewComponent {
|
|
23213
23262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23214
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23263
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23215
23264
|
}
|
|
23216
23265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
|
|
23217
23266
|
type: Component,
|
|
@@ -23220,7 +23269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23220
23269
|
|
|
23221
23270
|
class RecordPreviewListComponent extends RecordPreviewComponent {
|
|
23222
23271
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23272
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23224
23273
|
}
|
|
23225
23274
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
|
|
23226
23275
|
type: Component,
|
|
@@ -23317,8 +23366,7 @@ class MetadataQualityComponent {
|
|
|
23317
23366
|
: this.calculatedQualityScore;
|
|
23318
23367
|
}
|
|
23319
23368
|
get calculatedQualityScore() {
|
|
23320
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23321
|
-
this.items.length);
|
|
23369
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23322
23370
|
}
|
|
23323
23371
|
showMenu() {
|
|
23324
23372
|
this.isMenuShown = true;
|
|
@@ -23368,7 +23416,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
23368
23416
|
this.elementRef = elementRef;
|
|
23369
23417
|
}
|
|
23370
23418
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23371
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23419
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23372
23420
|
}
|
|
23373
23421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
23374
23422
|
type: Component,
|
|
@@ -23386,7 +23434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23386
23434
|
|
|
23387
23435
|
class RecordPreviewTitleComponent extends RecordPreviewComponent {
|
|
23388
23436
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23389
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23437
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23390
23438
|
}
|
|
23391
23439
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
|
|
23392
23440
|
type: Component,
|
|
@@ -23426,7 +23474,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
|
|
|
23426
23474
|
return this.timeFormat.format(this.record.recordCreated, Date.now());
|
|
23427
23475
|
}
|
|
23428
23476
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, deps: [{ token: i0.ElementRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23429
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23477
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23430
23478
|
}
|
|
23431
23479
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
|
|
23432
23480
|
type: Component,
|
|
@@ -23759,11 +23807,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23759
23807
|
args: ['contentDiv']
|
|
23760
23808
|
}] } });
|
|
23761
23809
|
|
|
23762
|
-
class
|
|
23810
|
+
class CopyTextButtonComponent {
|
|
23763
23811
|
constructor() {
|
|
23764
|
-
this.
|
|
23812
|
+
this.displayText = true;
|
|
23813
|
+
this.rows = 1;
|
|
23765
23814
|
}
|
|
23766
|
-
|
|
23815
|
+
copyText(event) {
|
|
23816
|
+
navigator.clipboard.writeText(this.text);
|
|
23817
|
+
event.target.blur();
|
|
23818
|
+
}
|
|
23819
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23820
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23821
|
+
}
|
|
23822
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
23823
|
+
type: Component,
|
|
23824
|
+
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
23825
|
+
}], propDecorators: { text: [{
|
|
23826
|
+
type: Input
|
|
23827
|
+
}], tooltipText: [{
|
|
23828
|
+
type: Input
|
|
23829
|
+
}], displayText: [{
|
|
23830
|
+
type: Input
|
|
23831
|
+
}], rows: [{
|
|
23832
|
+
type: Input
|
|
23833
|
+
}] } });
|
|
23834
|
+
|
|
23835
|
+
class MarkdownParserComponent {
|
|
23836
|
+
get parsedMarkdown() {
|
|
23837
|
+
return marked.parse(this.textContent);
|
|
23838
|
+
}
|
|
23839
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23840
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, isStandalone: true, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23841
|
+
}
|
|
23842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23843
|
+
type: Component,
|
|
23844
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
23845
|
+
}], propDecorators: { textContent: [{
|
|
23846
|
+
type: Input
|
|
23847
|
+
}] } });
|
|
23848
|
+
|
|
23849
|
+
class ContentGhostComponent {
|
|
23850
|
+
constructor() {
|
|
23851
|
+
this.ghostClass = '';
|
|
23852
|
+
}
|
|
23853
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23767
23854
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: { showContent: "showContent", ghostClass: "ghostClass" }, ngImport: i0, template: "<div\n *ngIf=\"!showContent\"\n class=\"ghost bg-gray-100 rounded-lg relative overflow-hidden {{ ghostClass }}\"\n></div>\n<ng-content *ngIf=\"showContent\"></ng-content>\n", styles: [".ghost{min-height:2rem;min-width:2rem;overflow:hidden}.ghost:after{content:\"\";position:absolute;top:0;bottom:0;width:50%;background-image:linear-gradient(to left,rgba(251,251,251,.05),rgba(251,251,251,.3),rgba(251,251,251,.6),rgba(251,251,251,.3),rgba(251,251,251,.05));animation:loading 1s infinite}@keyframes loading{0%{left:-50%}to{left:100%}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23768
23855
|
}
|
|
23769
23856
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ContentGhostComponent, decorators: [{
|
|
@@ -23913,36 +24000,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23913
24000
|
args: ['container']
|
|
23914
24001
|
}] } });
|
|
23915
24002
|
|
|
23916
|
-
class MarkdownParserComponent {
|
|
23917
|
-
get parsedMarkdown() {
|
|
23918
|
-
return marked.parse(this.textContent);
|
|
23919
|
-
}
|
|
23920
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23921
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /deep/ .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /deep/ .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host /deep/ .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23922
|
-
}
|
|
23923
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23924
|
-
type: Component,
|
|
23925
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /deep/ .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /deep/ .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host /deep/ .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"] }]
|
|
23926
|
-
}], propDecorators: { textContent: [{
|
|
23927
|
-
type: Input
|
|
23928
|
-
}] } });
|
|
23929
|
-
|
|
23930
24003
|
class MetadataInfoComponent {
|
|
23931
24004
|
constructor() {
|
|
23932
24005
|
this.keyword = new EventEmitter();
|
|
23933
24006
|
}
|
|
23934
24007
|
get hasUsage() {
|
|
23935
24008
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23936
|
-
this.metadata.
|
|
23937
|
-
|
|
24009
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24010
|
+
this.legalConstraints.length > 0) ||
|
|
24011
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24012
|
+
this.otherConstraints.length > 0) ||
|
|
24013
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
24014
|
+
}
|
|
24015
|
+
get legalConstraints() {
|
|
24016
|
+
let array = [];
|
|
24017
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24018
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24019
|
+
}
|
|
24020
|
+
return array;
|
|
23938
24021
|
}
|
|
23939
|
-
get
|
|
24022
|
+
get otherConstraints() {
|
|
23940
24023
|
let array = [];
|
|
23941
|
-
if (this.metadata.
|
|
23942
|
-
array = array.concat(this.metadata.
|
|
24024
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24025
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23943
24026
|
}
|
|
23944
|
-
|
|
23945
|
-
|
|
24027
|
+
return array;
|
|
24028
|
+
}
|
|
24029
|
+
get licenses() {
|
|
24030
|
+
let array = [];
|
|
24031
|
+
if (this.metadata.licenses?.length) {
|
|
24032
|
+
array = array.concat(this.metadata.licenses
|
|
24033
|
+
.filter((c) => c.text)
|
|
24034
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23946
24035
|
}
|
|
23947
24036
|
return array;
|
|
23948
24037
|
}
|
|
@@ -23965,11 +24054,11 @@ class MetadataInfoComponent {
|
|
|
23965
24054
|
this.keyword.emit(keyword);
|
|
23966
24055
|
}
|
|
23967
24056
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23968
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<
|
|
24057
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23969
24058
|
}
|
|
23970
24059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23971
24060
|
type: Component,
|
|
23972
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
24061
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
23973
24062
|
}], propDecorators: { metadata: [{
|
|
23974
24063
|
type: Input
|
|
23975
24064
|
}], incomplete: [{
|
|
@@ -24038,11 +24127,11 @@ class ButtonComponent {
|
|
|
24038
24127
|
propagateToDocumentOnly(event);
|
|
24039
24128
|
}
|
|
24040
24129
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24041
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24042
24131
|
}
|
|
24043
24132
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
24044
24133
|
type: Component,
|
|
24045
|
-
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24134
|
+
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
24046
24135
|
}], propDecorators: { type: [{
|
|
24047
24136
|
type: Input
|
|
24048
24137
|
}], disabled: [{
|
|
@@ -24117,40 +24206,15 @@ class DownloadsListComponent {
|
|
|
24117
24206
|
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
24118
24207
|
}
|
|
24119
24208
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div
|
|
24209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24121
24210
|
}
|
|
24122
24211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
24123
24212
|
type: Component,
|
|
24124
|
-
args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div
|
|
24213
|
+
args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
|
|
24125
24214
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
24126
24215
|
type: Input
|
|
24127
24216
|
}] } });
|
|
24128
24217
|
|
|
24129
|
-
class CopyTextButtonComponent {
|
|
24130
|
-
constructor() {
|
|
24131
|
-
this.displayText = true;
|
|
24132
|
-
this.rows = 1;
|
|
24133
|
-
}
|
|
24134
|
-
copyText(event) {
|
|
24135
|
-
navigator.clipboard.writeText(this.text);
|
|
24136
|
-
event.target.blur();
|
|
24137
|
-
}
|
|
24138
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24139
|
-
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 }); }
|
|
24140
|
-
}
|
|
24141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24142
|
-
type: Component,
|
|
24143
|
-
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" }]
|
|
24144
|
-
}], propDecorators: { text: [{
|
|
24145
|
-
type: Input
|
|
24146
|
-
}], tooltipText: [{
|
|
24147
|
-
type: Input
|
|
24148
|
-
}], displayText: [{
|
|
24149
|
-
type: Input
|
|
24150
|
-
}], rows: [{
|
|
24151
|
-
type: Input
|
|
24152
|
-
}] } });
|
|
24153
|
-
|
|
24154
24218
|
class ApiCardComponent {
|
|
24155
24219
|
constructor() {
|
|
24156
24220
|
this.currentlyActive = false;
|
|
@@ -24347,11 +24411,11 @@ class CarouselComponent {
|
|
|
24347
24411
|
this.emblaApi.scrollTo(stepIndex);
|
|
24348
24412
|
}
|
|
24349
24413
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24350
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24414
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24351
24415
|
}
|
|
24352
24416
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24353
24417
|
type: Component,
|
|
24354
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24418
|
+
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
|
|
24355
24419
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24356
24420
|
type: Input
|
|
24357
24421
|
}], stepsContainerClass: [{
|
|
@@ -24395,6 +24459,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24395
24459
|
}]
|
|
24396
24460
|
}] });
|
|
24397
24461
|
|
|
24462
|
+
class InteractiveTableColumnComponent {
|
|
24463
|
+
constructor() {
|
|
24464
|
+
this.grow = false;
|
|
24465
|
+
this.sortable = false;
|
|
24466
|
+
this.activeSort = null;
|
|
24467
|
+
this.sortChange = new EventEmitter();
|
|
24468
|
+
}
|
|
24469
|
+
handleSortChange() {
|
|
24470
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24471
|
+
this.sortChange.emit(this.activeSort);
|
|
24472
|
+
}
|
|
24473
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24474
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableColumnComponent, isStandalone: true, selector: "gn-ui-interactive-table-column", inputs: { grow: "grow", sortable: "sortable", activeSort: "activeSort" }, outputs: { sortChange: "sortChange" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "cell", first: true, predicate: ["cell"], descendants: true }], ngImport: i0, template: "<span>empty</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24475
|
+
}
|
|
24476
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24477
|
+
type: Component,
|
|
24478
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24479
|
+
}], propDecorators: { header: [{
|
|
24480
|
+
type: ContentChild,
|
|
24481
|
+
args: ['header']
|
|
24482
|
+
}], cell: [{
|
|
24483
|
+
type: ContentChild,
|
|
24484
|
+
args: ['cell']
|
|
24485
|
+
}], grow: [{
|
|
24486
|
+
type: Input
|
|
24487
|
+
}], sortable: [{
|
|
24488
|
+
type: Input
|
|
24489
|
+
}], activeSort: [{
|
|
24490
|
+
type: Input
|
|
24491
|
+
}], sortChange: [{
|
|
24492
|
+
type: Output
|
|
24493
|
+
}] } });
|
|
24494
|
+
|
|
24495
|
+
class InteractiveTableComponent {
|
|
24496
|
+
constructor() {
|
|
24497
|
+
this.items = [];
|
|
24498
|
+
this.itemClick = new EventEmitter();
|
|
24499
|
+
}
|
|
24500
|
+
get gridStyle() {
|
|
24501
|
+
return {
|
|
24502
|
+
'grid-template-columns': this.columns
|
|
24503
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24504
|
+
.join(' '),
|
|
24505
|
+
};
|
|
24506
|
+
}
|
|
24507
|
+
handleRowClick(item) {
|
|
24508
|
+
this.itemClick.emit(item);
|
|
24509
|
+
}
|
|
24510
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24511
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24512
|
+
}
|
|
24513
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24514
|
+
type: Component,
|
|
24515
|
+
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"] }]
|
|
24516
|
+
}], propDecorators: { columns: [{
|
|
24517
|
+
type: ContentChildren,
|
|
24518
|
+
args: [InteractiveTableColumnComponent]
|
|
24519
|
+
}], items: [{
|
|
24520
|
+
type: Input
|
|
24521
|
+
}], itemClick: [{
|
|
24522
|
+
type: Output
|
|
24523
|
+
}] } });
|
|
24524
|
+
|
|
24398
24525
|
class LinkCardComponent {
|
|
24399
24526
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24400
24527
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -24408,11 +24535,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24408
24535
|
|
|
24409
24536
|
class RelatedRecordCardComponent {
|
|
24410
24537
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24411
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]
|
|
24538
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24412
24539
|
}
|
|
24413
24540
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
24414
24541
|
type: Component,
|
|
24415
|
-
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]
|
|
24542
|
+
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
|
|
24416
24543
|
}], propDecorators: { record: [{
|
|
24417
24544
|
type: Input
|
|
24418
24545
|
}] } });
|
|
@@ -24440,11 +24567,11 @@ class MetadataContactComponent {
|
|
|
24440
24567
|
this.organizationClick.emit(this.shownOrganization);
|
|
24441
24568
|
}
|
|
24442
24569
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24443
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24570
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24444
24571
|
}
|
|
24445
24572
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24446
24573
|
type: Component,
|
|
24447
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24574
|
+
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24448
24575
|
}], propDecorators: { metadata: [{
|
|
24449
24576
|
type: Input
|
|
24450
24577
|
}], organizationClick: [{
|
|
@@ -24848,11 +24975,11 @@ class DropdownMultiselectComponent {
|
|
|
24848
24975
|
this.setFocus();
|
|
24849
24976
|
}
|
|
24850
24977
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24851
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
24978
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24852
24979
|
}
|
|
24853
24980
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24854
24981
|
type: Component,
|
|
24855
|
-
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
24982
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24856
24983
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24857
24984
|
type: Input
|
|
24858
24985
|
}], choices: [{
|
|
@@ -25006,11 +25133,11 @@ class TextAreaComponent {
|
|
|
25006
25133
|
this.rawChange.next(value);
|
|
25007
25134
|
}
|
|
25008
25135
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25009
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25010
25137
|
}
|
|
25011
25138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
25012
25139
|
type: Component,
|
|
25013
|
-
args: [{ selector: 'gn-ui-text-area', template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25140
|
+
args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25014
25141
|
}], propDecorators: { value: [{
|
|
25015
25142
|
type: Input
|
|
25016
25143
|
}], placeholder: [{
|
|
@@ -25111,11 +25238,11 @@ class AutocompleteComponent {
|
|
|
25111
25238
|
}
|
|
25112
25239
|
}
|
|
25113
25240
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25241
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25115
25242
|
}
|
|
25116
25243
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25117
25244
|
type: Component,
|
|
25118
|
-
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25245
|
+
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
25119
25246
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25120
25247
|
type: Input
|
|
25121
25248
|
}], action: [{
|
|
@@ -25164,11 +25291,11 @@ class StarToggleComponent {
|
|
|
25164
25291
|
event.preventDefault();
|
|
25165
25292
|
}
|
|
25166
25293
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25167
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25294
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25168
25295
|
}
|
|
25169
25296
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, decorators: [{
|
|
25170
25297
|
type: Component,
|
|
25171
|
-
args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
|
|
25298
|
+
args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
|
|
25172
25299
|
}], propDecorators: { toggled: [{
|
|
25173
25300
|
type: Input
|
|
25174
25301
|
}], disabled: [{
|
|
@@ -25280,11 +25407,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25280
25407
|
|
|
25281
25408
|
class NavigationButtonComponent {
|
|
25282
25409
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25283
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center backdrop-blur p-1 bg-primary-opacity-
|
|
25410
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25284
25411
|
}
|
|
25285
25412
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25286
25413
|
type: Component,
|
|
25287
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center backdrop-blur p-1 bg-primary-opacity-
|
|
25414
|
+
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n" }]
|
|
25288
25415
|
}], propDecorators: { label: [{
|
|
25289
25416
|
type: Input
|
|
25290
25417
|
}], icon: [{
|
|
@@ -25491,11 +25618,11 @@ class CheckboxComponent {
|
|
|
25491
25618
|
this.changed.emit(this.checked);
|
|
25492
25619
|
}
|
|
25493
25620
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25494
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25621
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25495
25622
|
}
|
|
25496
25623
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25497
25624
|
type: Component,
|
|
25498
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25625
|
+
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
|
|
25499
25626
|
}], propDecorators: { type: [{
|
|
25500
25627
|
type: Input
|
|
25501
25628
|
}], checked: [{
|
|
@@ -25550,14 +25677,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25550
25677
|
args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
25551
25678
|
}] });
|
|
25552
25679
|
|
|
25680
|
+
class EditableLabelDirective {
|
|
25681
|
+
constructor(el, renderer) {
|
|
25682
|
+
this.el = el;
|
|
25683
|
+
this.renderer = renderer;
|
|
25684
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25685
|
+
}
|
|
25686
|
+
ngAfterViewInit() {
|
|
25687
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25688
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25689
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25690
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25691
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25692
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25693
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25694
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25695
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25696
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25697
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25698
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25699
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25700
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25701
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25702
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25703
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25704
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25705
|
+
});
|
|
25706
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25707
|
+
}
|
|
25708
|
+
}
|
|
25709
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25710
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
25711
|
+
}
|
|
25712
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25713
|
+
type: Directive,
|
|
25714
|
+
args: [{
|
|
25715
|
+
selector: '[gnUiEditableLabel]',
|
|
25716
|
+
standalone: true,
|
|
25717
|
+
}]
|
|
25718
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25719
|
+
type: Output
|
|
25720
|
+
}], gnUiEditableLabel: [{
|
|
25721
|
+
type: Input
|
|
25722
|
+
}] } });
|
|
25723
|
+
|
|
25553
25724
|
class UiInputsModule {
|
|
25554
25725
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25555
25726
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
25556
25727
|
AutocompleteComponent,
|
|
25557
|
-
ButtonComponent,
|
|
25558
25728
|
TextInputComponent,
|
|
25559
25729
|
DragAndDropFileInputComponent,
|
|
25560
|
-
TextAreaComponent,
|
|
25561
25730
|
ChipsInputComponent,
|
|
25562
25731
|
NavigationButtonComponent,
|
|
25563
25732
|
StarToggleComponent,
|
|
@@ -25589,7 +25758,10 @@ class UiInputsModule {
|
|
|
25589
25758
|
MatFormFieldModule,
|
|
25590
25759
|
MatInputModule,
|
|
25591
25760
|
MatDatepickerModule,
|
|
25592
|
-
MatNativeDateModule
|
|
25761
|
+
MatNativeDateModule,
|
|
25762
|
+
EditableLabelDirective,
|
|
25763
|
+
TextAreaComponent,
|
|
25764
|
+
ButtonComponent], exports: [DropdownSelectorComponent,
|
|
25593
25765
|
AutocompleteComponent,
|
|
25594
25766
|
ButtonComponent,
|
|
25595
25767
|
TextInputComponent,
|
|
@@ -25605,7 +25777,8 @@ class UiInputsModule {
|
|
|
25605
25777
|
CopyTextButtonComponent,
|
|
25606
25778
|
CheckboxComponent,
|
|
25607
25779
|
SearchInputComponent,
|
|
25608
|
-
DateRangePickerComponent
|
|
25780
|
+
DateRangePickerComponent,
|
|
25781
|
+
EditableLabelDirective] }); }
|
|
25609
25782
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25610
25783
|
TranslateModule.forChild(),
|
|
25611
25784
|
NgxDropzoneModule,
|
|
@@ -25630,10 +25803,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25630
25803
|
declarations: [
|
|
25631
25804
|
DropdownSelectorComponent,
|
|
25632
25805
|
AutocompleteComponent,
|
|
25633
|
-
ButtonComponent,
|
|
25634
25806
|
TextInputComponent,
|
|
25635
25807
|
DragAndDropFileInputComponent,
|
|
25636
|
-
TextAreaComponent,
|
|
25637
25808
|
ChipsInputComponent,
|
|
25638
25809
|
NavigationButtonComponent,
|
|
25639
25810
|
StarToggleComponent,
|
|
@@ -25671,6 +25842,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25671
25842
|
MatInputModule,
|
|
25672
25843
|
MatDatepickerModule,
|
|
25673
25844
|
MatNativeDateModule,
|
|
25845
|
+
EditableLabelDirective,
|
|
25846
|
+
TextAreaComponent,
|
|
25847
|
+
ButtonComponent,
|
|
25674
25848
|
],
|
|
25675
25849
|
exports: [
|
|
25676
25850
|
DropdownSelectorComponent,
|
|
@@ -25690,6 +25864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25690
25864
|
CheckboxComponent,
|
|
25691
25865
|
SearchInputComponent,
|
|
25692
25866
|
DateRangePickerComponent,
|
|
25867
|
+
EditableLabelDirective,
|
|
25693
25868
|
],
|
|
25694
25869
|
}]
|
|
25695
25870
|
}] });
|
|
@@ -25789,7 +25964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25789
25964
|
|
|
25790
25965
|
const DEFAULT_PARAMS = {
|
|
25791
25966
|
OFFSET: '',
|
|
25792
|
-
LIMIT: '',
|
|
25967
|
+
LIMIT: '-1',
|
|
25793
25968
|
FORMAT: 'json',
|
|
25794
25969
|
};
|
|
25795
25970
|
class RecordApiFormComponent {
|
|
@@ -25818,6 +25993,8 @@ class RecordApiFormComponent {
|
|
|
25818
25993
|
}
|
|
25819
25994
|
return outputUrl;
|
|
25820
25995
|
}));
|
|
25996
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
25997
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25821
25998
|
}
|
|
25822
25999
|
set apiLink(value) {
|
|
25823
26000
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25827,10 +26004,11 @@ class RecordApiFormComponent {
|
|
|
25827
26004
|
this.offset$.next(value);
|
|
25828
26005
|
}
|
|
25829
26006
|
setLimit(value) {
|
|
25830
|
-
|
|
26007
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26008
|
+
this.limit$.next(newLimit);
|
|
25831
26009
|
}
|
|
25832
26010
|
setFormat(value) {
|
|
25833
|
-
this.format$.next(value);
|
|
26011
|
+
this.format$.next(String(value));
|
|
25834
26012
|
}
|
|
25835
26013
|
resetUrl() {
|
|
25836
26014
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25838,15 +26016,34 @@ class RecordApiFormComponent {
|
|
|
25838
26016
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25839
26017
|
}
|
|
25840
26018
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25841
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26019
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25842
26020
|
}
|
|
25843
26021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25844
26022
|
type: Component,
|
|
25845
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26023
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
25846
26024
|
}], propDecorators: { apiLink: [{
|
|
25847
26025
|
type: Input
|
|
25848
26026
|
}] } });
|
|
25849
26027
|
|
|
26028
|
+
class ImageOverlayPreviewComponent {
|
|
26029
|
+
constructor() {
|
|
26030
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
26031
|
+
}
|
|
26032
|
+
openLightbox(src) {
|
|
26033
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
26034
|
+
}
|
|
26035
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26036
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
|
|
26037
|
+
}
|
|
26038
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
26039
|
+
type: Component,
|
|
26040
|
+
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
|
|
26041
|
+
}], propDecorators: { imageUrl: [{
|
|
26042
|
+
type: Input
|
|
26043
|
+
}], isPlaceholderShown: [{
|
|
26044
|
+
type: Output
|
|
26045
|
+
}] } });
|
|
26046
|
+
|
|
25850
26047
|
class UiElementsModule {
|
|
25851
26048
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25852
26049
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -25869,7 +26066,7 @@ class UiElementsModule {
|
|
|
25869
26066
|
PaginationButtonsComponent,
|
|
25870
26067
|
MaxLinesComponent,
|
|
25871
26068
|
RecordApiFormComponent,
|
|
25872
|
-
|
|
26069
|
+
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25873
26070
|
MatIconModule,
|
|
25874
26071
|
MatTooltipModule,
|
|
25875
26072
|
UiWidgetsModule,
|
|
@@ -25877,7 +26074,8 @@ class UiElementsModule {
|
|
|
25877
26074
|
RouterModule,
|
|
25878
26075
|
UiInputsModule,
|
|
25879
26076
|
FormsModule,
|
|
25880
|
-
NgOptimizedImage
|
|
26077
|
+
NgOptimizedImage,
|
|
26078
|
+
MarkdownParserComponent], exports: [MetadataInfoComponent,
|
|
25881
26079
|
ContentGhostComponent,
|
|
25882
26080
|
DownloadItemComponent,
|
|
25883
26081
|
DownloadsListComponent,
|
|
@@ -25894,8 +26092,10 @@ class UiElementsModule {
|
|
|
25894
26092
|
AvatarComponent,
|
|
25895
26093
|
UserPreviewComponent,
|
|
25896
26094
|
PaginationButtonsComponent,
|
|
26095
|
+
MaxLinesComponent,
|
|
25897
26096
|
RecordApiFormComponent,
|
|
25898
|
-
MarkdownParserComponent
|
|
26097
|
+
MarkdownParserComponent,
|
|
26098
|
+
ImageOverlayPreviewComponent] }); }
|
|
25899
26099
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
25900
26100
|
MatIconModule,
|
|
25901
26101
|
MatTooltipModule,
|
|
@@ -25922,6 +26122,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25922
26122
|
UiInputsModule,
|
|
25923
26123
|
FormsModule,
|
|
25924
26124
|
NgOptimizedImage,
|
|
26125
|
+
MarkdownParserComponent,
|
|
25925
26126
|
],
|
|
25926
26127
|
declarations: [
|
|
25927
26128
|
MetadataInfoComponent,
|
|
@@ -25944,7 +26145,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25944
26145
|
PaginationButtonsComponent,
|
|
25945
26146
|
MaxLinesComponent,
|
|
25946
26147
|
RecordApiFormComponent,
|
|
25947
|
-
|
|
26148
|
+
ImageOverlayPreviewComponent,
|
|
25948
26149
|
],
|
|
25949
26150
|
exports: [
|
|
25950
26151
|
MetadataInfoComponent,
|
|
@@ -25964,149 +26165,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25964
26165
|
AvatarComponent,
|
|
25965
26166
|
UserPreviewComponent,
|
|
25966
26167
|
PaginationButtonsComponent,
|
|
26168
|
+
MaxLinesComponent,
|
|
25967
26169
|
RecordApiFormComponent,
|
|
25968
26170
|
MarkdownParserComponent,
|
|
26171
|
+
ImageOverlayPreviewComponent,
|
|
25969
26172
|
],
|
|
25970
26173
|
}]
|
|
25971
26174
|
}] });
|
|
25972
26175
|
|
|
25973
|
-
class RecordTableComponent {
|
|
25974
|
-
constructor() {
|
|
25975
|
-
this.selectedRecords = [];
|
|
25976
|
-
this.records = [];
|
|
25977
|
-
this.recordClick = new EventEmitter();
|
|
25978
|
-
this.recordsSelect = new EventEmitter();
|
|
25979
|
-
this.recordsDeselect = new EventEmitter();
|
|
25980
|
-
this.sortByChange = new EventEmitter();
|
|
25981
|
-
}
|
|
25982
|
-
dateToString(date) {
|
|
25983
|
-
return date?.toLocaleDateString(undefined, {
|
|
25984
|
-
year: 'numeric',
|
|
25985
|
-
month: 'long',
|
|
25986
|
-
day: 'numeric',
|
|
25987
|
-
timeZone: 'UTC',
|
|
25988
|
-
});
|
|
25989
|
-
}
|
|
25990
|
-
getStatus(isPublishedToAll) {
|
|
25991
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
25992
|
-
}
|
|
25993
|
-
formatUserInfo(userInfo) {
|
|
25994
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
25995
|
-
if (infos && infos.length === 4) {
|
|
25996
|
-
return `${infos[2]} ${infos[1]}`;
|
|
25997
|
-
}
|
|
25998
|
-
return undefined;
|
|
25999
|
-
}
|
|
26000
|
-
getRecordFormats(record) {
|
|
26001
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
26002
|
-
return [];
|
|
26003
|
-
}
|
|
26004
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
26005
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
26006
|
-
return formats;
|
|
26007
|
-
}
|
|
26008
|
-
getBadgeColor(format) {
|
|
26009
|
-
return getBadgeColor(format);
|
|
26010
|
-
}
|
|
26011
|
-
getOrderForColumn(col) {
|
|
26012
|
-
if (!this.sortBy) {
|
|
26013
|
-
return null;
|
|
26014
|
-
}
|
|
26015
|
-
let order = null;
|
|
26016
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
26017
|
-
? this.sortBy
|
|
26018
|
-
: [this.sortBy];
|
|
26019
|
-
sortedArray.forEach((sortedCol) => {
|
|
26020
|
-
if (sortedCol[1] === col) {
|
|
26021
|
-
order = sortedCol[0];
|
|
26022
|
-
}
|
|
26023
|
-
});
|
|
26024
|
-
return order;
|
|
26025
|
-
}
|
|
26026
|
-
setSortBy(col) {
|
|
26027
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26028
|
-
let newOrder;
|
|
26029
|
-
if (sortOrder) {
|
|
26030
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
26031
|
-
}
|
|
26032
|
-
else {
|
|
26033
|
-
newOrder = 'asc';
|
|
26034
|
-
}
|
|
26035
|
-
this.sortByChange.emit([newOrder, col]);
|
|
26036
|
-
this.sortBy = [newOrder, col];
|
|
26037
|
-
}
|
|
26038
|
-
isSortedBy(col, order) {
|
|
26039
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26040
|
-
return sortOrder === order;
|
|
26041
|
-
}
|
|
26042
|
-
isChecked(record) {
|
|
26043
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
26044
|
-
return true;
|
|
26045
|
-
}
|
|
26046
|
-
return false;
|
|
26047
|
-
}
|
|
26048
|
-
handleRecordSelectedChange(selected, record) {
|
|
26049
|
-
if (!selected) {
|
|
26050
|
-
this.recordsDeselect.emit([record]);
|
|
26051
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
26052
|
-
}
|
|
26053
|
-
else {
|
|
26054
|
-
this.recordsSelect.emit([record]);
|
|
26055
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
26056
|
-
}
|
|
26057
|
-
}
|
|
26058
|
-
selectAll() {
|
|
26059
|
-
if (this.isAllSelected()) {
|
|
26060
|
-
this.recordsDeselect.emit(this.records);
|
|
26061
|
-
this.selectedRecords = [];
|
|
26062
|
-
}
|
|
26063
|
-
else {
|
|
26064
|
-
this.recordsSelect.emit(this.records);
|
|
26065
|
-
this.selectedRecords = this.records.map((record) => {
|
|
26066
|
-
return record.uniqueIdentifier;
|
|
26067
|
-
});
|
|
26068
|
-
}
|
|
26069
|
-
}
|
|
26070
|
-
isAllSelected() {
|
|
26071
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
26072
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
26073
|
-
if (allRecords.length === this.records.length) {
|
|
26074
|
-
return true;
|
|
26075
|
-
}
|
|
26076
|
-
}
|
|
26077
|
-
return false;
|
|
26078
|
-
}
|
|
26079
|
-
isSomeSelected() {
|
|
26080
|
-
if (this.selectedRecords.length > 0 &&
|
|
26081
|
-
this.selectedRecords.length < this.records.length) {
|
|
26082
|
-
return true;
|
|
26083
|
-
}
|
|
26084
|
-
return false;
|
|
26085
|
-
}
|
|
26086
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26087
|
-
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"] }] }); }
|
|
26088
|
-
}
|
|
26089
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
26090
|
-
type: Component,
|
|
26091
|
-
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"] }]
|
|
26092
|
-
}], propDecorators: { selectedRecords: [{
|
|
26093
|
-
type: Input
|
|
26094
|
-
}], records: [{
|
|
26095
|
-
type: Input
|
|
26096
|
-
}], totalHits: [{
|
|
26097
|
-
type: Input
|
|
26098
|
-
}], sortBy: [{
|
|
26099
|
-
type: Input
|
|
26100
|
-
}], recordClick: [{
|
|
26101
|
-
type: Output
|
|
26102
|
-
}], recordsSelect: [{
|
|
26103
|
-
type: Output
|
|
26104
|
-
}], recordsDeselect: [{
|
|
26105
|
-
type: Output
|
|
26106
|
-
}], sortByChange: [{
|
|
26107
|
-
type: Output
|
|
26108
|
-
}] } });
|
|
26109
|
-
|
|
26110
26176
|
class UiSearchModule {
|
|
26111
26177
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26112
26178
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26119,8 +26185,7 @@ class UiSearchModule {
|
|
|
26119
26185
|
ResultsHitsNumberComponent,
|
|
26120
26186
|
ResultsListItemComponent,
|
|
26121
26187
|
RecordPreviewFeedComponent,
|
|
26122
|
-
RecordPreviewRowComponent,
|
|
26123
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26188
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26124
26189
|
FacetsModule$1,
|
|
26125
26190
|
FormsModule,
|
|
26126
26191
|
ReactiveFormsModule,
|
|
@@ -26131,7 +26196,8 @@ class UiSearchModule {
|
|
|
26131
26196
|
UiElementsModule,
|
|
26132
26197
|
MatIconModule,
|
|
26133
26198
|
MatCheckboxModule,
|
|
26134
|
-
RouterLink
|
|
26199
|
+
RouterLink,
|
|
26200
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26135
26201
|
RecordPreviewCardComponent,
|
|
26136
26202
|
RecordPreviewTextComponent,
|
|
26137
26203
|
RecordPreviewTitleComponent,
|
|
@@ -26141,8 +26207,7 @@ class UiSearchModule {
|
|
|
26141
26207
|
RecordPreviewComponent,
|
|
26142
26208
|
ResultsHitsNumberComponent,
|
|
26143
26209
|
RecordPreviewFeedComponent,
|
|
26144
|
-
RecordPreviewRowComponent
|
|
26145
|
-
RecordTableComponent] }); }
|
|
26210
|
+
RecordPreviewRowComponent] }); }
|
|
26146
26211
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26147
26212
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26148
26213
|
], imports: [CommonModule,
|
|
@@ -26157,7 +26222,8 @@ class UiSearchModule {
|
|
|
26157
26222
|
UiInputsModule,
|
|
26158
26223
|
UiElementsModule,
|
|
26159
26224
|
MatIconModule,
|
|
26160
|
-
MatCheckboxModule,
|
|
26225
|
+
MatCheckboxModule,
|
|
26226
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26161
26227
|
}
|
|
26162
26228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26163
26229
|
type: NgModule,
|
|
@@ -26174,7 +26240,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26174
26240
|
ResultsListItemComponent,
|
|
26175
26241
|
RecordPreviewFeedComponent,
|
|
26176
26242
|
RecordPreviewRowComponent,
|
|
26177
|
-
RecordTableComponent,
|
|
26178
26243
|
],
|
|
26179
26244
|
imports: [
|
|
26180
26245
|
CommonModule,
|
|
@@ -26191,6 +26256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26191
26256
|
MatIconModule,
|
|
26192
26257
|
MatCheckboxModule,
|
|
26193
26258
|
RouterLink,
|
|
26259
|
+
InteractiveTableComponent,
|
|
26194
26260
|
],
|
|
26195
26261
|
exports: [
|
|
26196
26262
|
RecordPreviewListComponent,
|
|
@@ -26204,7 +26270,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26204
26270
|
ResultsHitsNumberComponent,
|
|
26205
26271
|
RecordPreviewFeedComponent,
|
|
26206
26272
|
RecordPreviewRowComponent,
|
|
26207
|
-
RecordTableComponent,
|
|
26208
26273
|
],
|
|
26209
26274
|
providers: [
|
|
26210
26275
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26763,6 +26828,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26763
26828
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26764
26829
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26765
26830
|
|
|
26831
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26832
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26833
|
+
|
|
26766
26834
|
class SearchFacade {
|
|
26767
26835
|
constructor(store, filterGeometry) {
|
|
26768
26836
|
this.store = store;
|
|
@@ -26867,6 +26935,7 @@ class SearchFacade {
|
|
|
26867
26935
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26868
26936
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26869
26937
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
26938
|
+
return this;
|
|
26870
26939
|
}
|
|
26871
26940
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26872
26941
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27251,8 +27320,11 @@ class FuzzySearchComponent {
|
|
|
27251
27320
|
this.searchService.updateFilters({ any });
|
|
27252
27321
|
}
|
|
27253
27322
|
}
|
|
27254
|
-
handleInputCleared() {
|
|
27255
|
-
this.
|
|
27323
|
+
async handleInputCleared() {
|
|
27324
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27325
|
+
if (currentSearchFilters.any) {
|
|
27326
|
+
this.searchService.updateFilters({ any: '' });
|
|
27327
|
+
}
|
|
27256
27328
|
}
|
|
27257
27329
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27258
27330
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -27332,6 +27404,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27332
27404
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27333
27405
|
}] }]; } });
|
|
27334
27406
|
|
|
27407
|
+
// expects the replacement key ${uuid}
|
|
27408
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27409
|
+
|
|
27335
27410
|
class FavoriteStarComponent {
|
|
27336
27411
|
set record(value) {
|
|
27337
27412
|
this.record_ = value;
|
|
@@ -27352,6 +27427,7 @@ class FavoriteStarComponent {
|
|
|
27352
27427
|
this.changeDetector = changeDetector;
|
|
27353
27428
|
this.authService = authService;
|
|
27354
27429
|
this.translateService = translateService;
|
|
27430
|
+
this.displayCount = true;
|
|
27355
27431
|
this.isFavorite$ = this.favoritesService.myFavoritesUuid$.pipe(map$1((favorites) => favorites.indexOf(this.record.uniqueIdentifier) > -1));
|
|
27356
27432
|
this.isAnonymous$ = this.platformService.isAnonymous();
|
|
27357
27433
|
this.loading = false;
|
|
@@ -27414,12 +27490,14 @@ class FavoriteStarComponent {
|
|
|
27414
27490
|
});
|
|
27415
27491
|
}
|
|
27416
27492
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27417
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div>\n <span
|
|
27493
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27418
27494
|
}
|
|
27419
27495
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
27420
27496
|
type: Component,
|
|
27421
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <span
|
|
27422
|
-
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: {
|
|
27497
|
+
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
|
|
27498
|
+
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
|
|
27499
|
+
type: Input
|
|
27500
|
+
}], record: [{
|
|
27423
27501
|
type: Input
|
|
27424
27502
|
}], starToggleRef: [{
|
|
27425
27503
|
type: ViewChild,
|
|
@@ -27462,7 +27540,7 @@ class ResultsListContainerComponent {
|
|
|
27462
27540
|
return this.recordUrlTemplate.replace('${uuid}', metadata.uniqueIdentifier);
|
|
27463
27541
|
}
|
|
27464
27542
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }, { token: RECORD_URL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27465
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
|
|
27543
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["displayCount", "record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
|
|
27466
27544
|
}
|
|
27467
27545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
|
|
27468
27546
|
type: Component,
|
|
@@ -27590,9 +27668,11 @@ class SearchEffects {
|
|
|
27590
27668
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27591
27669
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27592
27670
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27593
|
-
return of([state, favorites,
|
|
27671
|
+
return of([state, favorites, undefined]);
|
|
27594
27672
|
}
|
|
27595
27673
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27674
|
+
if (!geom)
|
|
27675
|
+
return;
|
|
27596
27676
|
try {
|
|
27597
27677
|
const trace = valid$1(geom, true);
|
|
27598
27678
|
if (trace?.length > 0) {
|
|
@@ -27604,7 +27684,7 @@ class SearchEffects {
|
|
|
27604
27684
|
throw new Error();
|
|
27605
27685
|
}
|
|
27606
27686
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27607
|
-
return of([state, favorites,
|
|
27687
|
+
return of([state, favorites, undefined]);
|
|
27608
27688
|
}));
|
|
27609
27689
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27610
27690
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -27703,10 +27783,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27703
27783
|
class AbstractSearchField {
|
|
27704
27784
|
}
|
|
27705
27785
|
class SimpleSearchField {
|
|
27706
|
-
constructor(esFieldName, order = 'asc',
|
|
27786
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27707
27787
|
this.esFieldName = esFieldName;
|
|
27708
|
-
this.order = order;
|
|
27709
27788
|
this.injector = injector;
|
|
27789
|
+
this.order = order;
|
|
27790
|
+
this.orderType = orderType;
|
|
27710
27791
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27711
27792
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27712
27793
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27717,12 +27798,12 @@ class SimpleSearchField {
|
|
|
27717
27798
|
type: 'terms',
|
|
27718
27799
|
field: this.esFieldName,
|
|
27719
27800
|
limit: 1000,
|
|
27720
|
-
sort: [this.order,
|
|
27801
|
+
sort: [this.order, this.orderType],
|
|
27721
27802
|
},
|
|
27722
27803
|
};
|
|
27723
27804
|
}
|
|
27724
27805
|
async getBucketLabel(bucket) {
|
|
27725
|
-
return bucket.term;
|
|
27806
|
+
return bucket.term.toString();
|
|
27726
27807
|
}
|
|
27727
27808
|
getAvailableValues() {
|
|
27728
27809
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27750,9 +27831,13 @@ class SimpleSearchField {
|
|
|
27750
27831
|
return of(values);
|
|
27751
27832
|
}
|
|
27752
27833
|
}
|
|
27753
|
-
class
|
|
27754
|
-
constructor() {
|
|
27755
|
-
super(
|
|
27834
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
27835
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27836
|
+
super(esFieldName, injector, order, orderType);
|
|
27837
|
+
this.esFieldName = esFieldName;
|
|
27838
|
+
this.injector = injector;
|
|
27839
|
+
this.order = order;
|
|
27840
|
+
this.orderType = orderType;
|
|
27756
27841
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27757
27842
|
}
|
|
27758
27843
|
async getTranslation(key) {
|
|
@@ -27762,26 +27847,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27762
27847
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27763
27848
|
}
|
|
27764
27849
|
getAvailableValues() {
|
|
27850
|
+
if (this.orderType === 'count')
|
|
27851
|
+
return super.getAvailableValues();
|
|
27765
27852
|
// sort values by alphabetical order
|
|
27766
27853
|
return super
|
|
27767
27854
|
.getAvailableValues()
|
|
27768
27855
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27769
27856
|
}
|
|
27770
27857
|
}
|
|
27771
|
-
|
|
27772
|
-
|
|
27773
|
-
|
|
27774
|
-
|
|
27858
|
+
/**
|
|
27859
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
27860
|
+
* to the defined METADATA_LANGUAGE token
|
|
27861
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
27862
|
+
*/
|
|
27863
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
27864
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27865
|
+
super(esFieldName, injector, order, orderType);
|
|
27866
|
+
this.esFieldName = esFieldName;
|
|
27867
|
+
this.injector = injector;
|
|
27868
|
+
this.order = order;
|
|
27869
|
+
this.orderType = orderType;
|
|
27775
27870
|
this.langService = this.injector.get(LangService);
|
|
27776
|
-
this.
|
|
27777
|
-
|
|
27778
|
-
|
|
27779
|
-
|
|
27780
|
-
|
|
27781
|
-
}
|
|
27782
|
-
|
|
27783
|
-
|
|
27784
|
-
|
|
27871
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
27872
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
27873
|
+
// permalinks that might not work for different users
|
|
27874
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
27875
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
27876
|
+
}
|
|
27877
|
+
else {
|
|
27878
|
+
this.esFieldName += '.default';
|
|
27879
|
+
}
|
|
27785
27880
|
}
|
|
27786
27881
|
}
|
|
27787
27882
|
class FullTextSearchField {
|
|
@@ -27801,7 +27896,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27801
27896
|
marker('search.filters.isSpatial.no');
|
|
27802
27897
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27803
27898
|
constructor(injector) {
|
|
27804
|
-
super('isSpatial', 'asc'
|
|
27899
|
+
super('isSpatial', injector, 'asc');
|
|
27805
27900
|
this.translateService = this.injector.get(TranslateService);
|
|
27806
27901
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27807
27902
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27851,7 +27946,7 @@ marker('search.filters.license.unknown');
|
|
|
27851
27946
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27852
27947
|
class LicenseSearchField extends SimpleSearchField {
|
|
27853
27948
|
constructor(injector) {
|
|
27854
|
-
super('license', 'asc'
|
|
27949
|
+
super('license', injector, 'asc');
|
|
27855
27950
|
this.translateService = this.injector.get(TranslateService);
|
|
27856
27951
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27857
27952
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -27935,7 +28030,7 @@ class OrganizationSearchField {
|
|
|
27935
28030
|
}
|
|
27936
28031
|
class OwnerSearchField extends SimpleSearchField {
|
|
27937
28032
|
constructor(injector) {
|
|
27938
|
-
super('owner', 'asc'
|
|
28033
|
+
super('owner', injector, 'asc');
|
|
27939
28034
|
}
|
|
27940
28035
|
getAvailableValues() {
|
|
27941
28036
|
return of([]);
|
|
@@ -27944,6 +28039,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
27944
28039
|
|
|
27945
28040
|
marker('search.filters.format');
|
|
27946
28041
|
marker('search.filters.inspireKeyword');
|
|
28042
|
+
marker('search.filters.keyword');
|
|
27947
28043
|
marker('search.filters.isSpatial');
|
|
27948
28044
|
marker('search.filters.license');
|
|
27949
28045
|
marker('search.filters.publicationYear');
|
|
@@ -27961,13 +28057,14 @@ class FieldsService {
|
|
|
27961
28057
|
this.injector = injector;
|
|
27962
28058
|
this.fields = {
|
|
27963
28059
|
publisher: new OrganizationSearchField(this.injector),
|
|
27964
|
-
format: new SimpleSearchField('format', 'asc'
|
|
27965
|
-
resourceType: new
|
|
27966
|
-
representationType: new
|
|
27967
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
27968
|
-
topic: new
|
|
27969
|
-
inspireKeyword: new
|
|
27970
|
-
|
|
28060
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28061
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28062
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28063
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28064
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28065
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28066
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28067
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
27971
28068
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
27972
28069
|
q: new FullTextSearchField(),
|
|
27973
28070
|
license: new LicenseSearchField(this.injector),
|
|
@@ -28041,10 +28138,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28041
28138
|
type: Input
|
|
28042
28139
|
}] } });
|
|
28043
28140
|
|
|
28044
|
-
// this geometry will be used to filter & boost results accordingly
|
|
28045
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
28046
|
-
// expects the replacement key ${uuid}
|
|
28047
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
28048
28141
|
class FeatureSearchModule {
|
|
28049
28142
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28050
28143
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28143,6 +28236,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28143
28236
|
}]
|
|
28144
28237
|
}] });
|
|
28145
28238
|
|
|
28239
|
+
class ResultsTableComponent {
|
|
28240
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28241
|
+
this.searchFacade = searchFacade;
|
|
28242
|
+
this.searchService = searchService;
|
|
28243
|
+
this.selectionService = selectionService;
|
|
28244
|
+
this.recordClick = new EventEmitter();
|
|
28245
|
+
this.records$ = this.searchFacade.results$;
|
|
28246
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28247
|
+
}
|
|
28248
|
+
dateToString(date) {
|
|
28249
|
+
return date?.toLocaleDateString(undefined, {
|
|
28250
|
+
year: 'numeric',
|
|
28251
|
+
month: 'long',
|
|
28252
|
+
day: 'numeric',
|
|
28253
|
+
timeZone: 'UTC',
|
|
28254
|
+
});
|
|
28255
|
+
}
|
|
28256
|
+
getStatus(isPublishedToAll) {
|
|
28257
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28258
|
+
}
|
|
28259
|
+
getRecordFormats(record) {
|
|
28260
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28261
|
+
return [];
|
|
28262
|
+
}
|
|
28263
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28264
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28265
|
+
return formats;
|
|
28266
|
+
}
|
|
28267
|
+
formatUserInfo(userInfo) {
|
|
28268
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28269
|
+
if (infos && infos.length === 4) {
|
|
28270
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28271
|
+
}
|
|
28272
|
+
return undefined;
|
|
28273
|
+
}
|
|
28274
|
+
getBadgeColor(format) {
|
|
28275
|
+
return getBadgeColor(format);
|
|
28276
|
+
}
|
|
28277
|
+
handleRecordClick(item) {
|
|
28278
|
+
this.recordClick.emit(item);
|
|
28279
|
+
}
|
|
28280
|
+
setSortBy(col, order) {
|
|
28281
|
+
this.searchService.setSortBy([order, col]);
|
|
28282
|
+
}
|
|
28283
|
+
isSortedBy(col) {
|
|
28284
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28285
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28286
|
+
? sortOrder
|
|
28287
|
+
: [sortOrder];
|
|
28288
|
+
for (const sort of sortArray) {
|
|
28289
|
+
if (sort[1] === col) {
|
|
28290
|
+
return sort[0];
|
|
28291
|
+
}
|
|
28292
|
+
}
|
|
28293
|
+
return null;
|
|
28294
|
+
}));
|
|
28295
|
+
}
|
|
28296
|
+
isChecked(record) {
|
|
28297
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28298
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28299
|
+
}));
|
|
28300
|
+
}
|
|
28301
|
+
handleRecordSelectedChange(selected, record) {
|
|
28302
|
+
if (!selected) {
|
|
28303
|
+
this.selectionService.deselectRecords([record]);
|
|
28304
|
+
}
|
|
28305
|
+
else {
|
|
28306
|
+
this.selectionService.selectRecords([record]);
|
|
28307
|
+
}
|
|
28308
|
+
}
|
|
28309
|
+
async toggleSelectAll() {
|
|
28310
|
+
const records = await firstValueFrom(this.records$);
|
|
28311
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28312
|
+
this.selectionService.deselectRecords(records);
|
|
28313
|
+
}
|
|
28314
|
+
else {
|
|
28315
|
+
this.selectionService.selectRecords(records);
|
|
28316
|
+
}
|
|
28317
|
+
}
|
|
28318
|
+
isAllSelected() {
|
|
28319
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28320
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28321
|
+
}));
|
|
28322
|
+
}
|
|
28323
|
+
isSomeSelected() {
|
|
28324
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28325
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28326
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28327
|
+
return !allSelected && someSelected;
|
|
28328
|
+
}));
|
|
28329
|
+
}
|
|
28330
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28331
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
|
|
28332
|
+
}
|
|
28333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28334
|
+
type: Component,
|
|
28335
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28336
|
+
CommonModule,
|
|
28337
|
+
UiInputsModule,
|
|
28338
|
+
InteractiveTableComponent,
|
|
28339
|
+
InteractiveTableColumnComponent,
|
|
28340
|
+
MatIconModule,
|
|
28341
|
+
TranslateModule,
|
|
28342
|
+
], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
|
|
28343
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28344
|
+
type: Output
|
|
28345
|
+
}] } });
|
|
28346
|
+
|
|
28146
28347
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28147
28348
|
get mapLinks() {
|
|
28148
28349
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28177,7 +28378,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
|
28177
28378
|
return getLinkLabel(link);
|
|
28178
28379
|
}
|
|
28179
28380
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, deps: [{ token: i0.ElementRef }, { token: LinkClassifierService }, { token: MapFacade }, { token: MapUtilsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28180
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28381
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28181
28382
|
}
|
|
28182
28383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
|
|
28183
28384
|
type: Component,
|
|
@@ -28272,6 +28473,157 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28272
28473
|
args: [{ selector: 'gn-ui-add-layer-from-wms', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
28273
28474
|
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28274
28475
|
|
|
28476
|
+
const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
|
|
28477
|
+
class AddLayerFromFileComponent {
|
|
28478
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28479
|
+
this.mapFacade = mapFacade;
|
|
28480
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28481
|
+
this.errorMessage = null;
|
|
28482
|
+
this.successMessage = null;
|
|
28483
|
+
this.loading = false;
|
|
28484
|
+
this.acceptedMimeType = ['.geojson'];
|
|
28485
|
+
this.maxFileSize = 5000000;
|
|
28486
|
+
}
|
|
28487
|
+
async handleFileChange(file) {
|
|
28488
|
+
if (!file) {
|
|
28489
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28490
|
+
return;
|
|
28491
|
+
}
|
|
28492
|
+
if (file.size > this.maxFileSize) {
|
|
28493
|
+
this.displayMessage('File size exceeds the limit of 5MB', 'error');
|
|
28494
|
+
return;
|
|
28495
|
+
}
|
|
28496
|
+
await this.addLayer(file);
|
|
28497
|
+
}
|
|
28498
|
+
async addLayer(file) {
|
|
28499
|
+
this.errorMessage = null;
|
|
28500
|
+
this.loading = true;
|
|
28501
|
+
try {
|
|
28502
|
+
if (!this.isFileFormatValid(file)) {
|
|
28503
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28504
|
+
return;
|
|
28505
|
+
}
|
|
28506
|
+
const fileExtension = this.getFileExtension(file);
|
|
28507
|
+
switch (fileExtension) {
|
|
28508
|
+
case 'geojson':
|
|
28509
|
+
await this.addGeoJsonLayer(file);
|
|
28510
|
+
break;
|
|
28511
|
+
default:
|
|
28512
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28513
|
+
break;
|
|
28514
|
+
}
|
|
28515
|
+
}
|
|
28516
|
+
catch (error) {
|
|
28517
|
+
const err = error;
|
|
28518
|
+
this.displayMessage('Error loading file: ' + err.message, 'error');
|
|
28519
|
+
}
|
|
28520
|
+
finally {
|
|
28521
|
+
this.loading = false;
|
|
28522
|
+
}
|
|
28523
|
+
}
|
|
28524
|
+
addGeoJsonLayer(file) {
|
|
28525
|
+
return new Promise((resolve, reject) => {
|
|
28526
|
+
try {
|
|
28527
|
+
const reader = new FileReader();
|
|
28528
|
+
reader.onload = () => {
|
|
28529
|
+
const result = reader.result;
|
|
28530
|
+
const title = file.name.split('.').slice(0, -1).join('.');
|
|
28531
|
+
const layerToAdd = {
|
|
28532
|
+
type: 'geojson',
|
|
28533
|
+
data: result,
|
|
28534
|
+
};
|
|
28535
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: title });
|
|
28536
|
+
this.displayMessage('File successfully added to map', 'success');
|
|
28537
|
+
resolve();
|
|
28538
|
+
};
|
|
28539
|
+
reader.onerror = reject;
|
|
28540
|
+
reader.readAsText(file);
|
|
28541
|
+
}
|
|
28542
|
+
catch (error) {
|
|
28543
|
+
reject(error);
|
|
28544
|
+
}
|
|
28545
|
+
});
|
|
28546
|
+
}
|
|
28547
|
+
isFileFormatValid(file) {
|
|
28548
|
+
const fileExtension = this.getFileExtension(file);
|
|
28549
|
+
return this.acceptedMimeType.includes(`.${fileExtension}`);
|
|
28550
|
+
}
|
|
28551
|
+
getFileExtension(file) {
|
|
28552
|
+
return file.name.split('.').pop();
|
|
28553
|
+
}
|
|
28554
|
+
displayMessage(message, type) {
|
|
28555
|
+
if (type === 'success') {
|
|
28556
|
+
this.successMessage = message;
|
|
28557
|
+
}
|
|
28558
|
+
else if (type === 'error') {
|
|
28559
|
+
this.errorMessage = message;
|
|
28560
|
+
}
|
|
28561
|
+
setTimeout(() => {
|
|
28562
|
+
this.successMessage = null;
|
|
28563
|
+
this.errorMessage = null;
|
|
28564
|
+
this.changeDetectorRef.detectChanges();
|
|
28565
|
+
}, 5000);
|
|
28566
|
+
}
|
|
28567
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28568
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file", ngImport: i0, template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DragAndDropFileInputComponent, selector: "gn-ui-drag-and-drop-file-input", inputs: ["placeholder", "accept"], outputs: ["fileChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28569
|
+
}
|
|
28570
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
|
|
28571
|
+
type: Component,
|
|
28572
|
+
args: [{ selector: 'gn-ui-add-layer-from-file', template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n" }]
|
|
28573
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28574
|
+
|
|
28575
|
+
class AddLayerFromWfsComponent {
|
|
28576
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28577
|
+
this.mapFacade = mapFacade;
|
|
28578
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28579
|
+
this.wfsUrl = '';
|
|
28580
|
+
this.loading = false;
|
|
28581
|
+
this.layers = [];
|
|
28582
|
+
this.wfsEndpoint = null;
|
|
28583
|
+
this.urlChange = new Subject();
|
|
28584
|
+
this.errorMessage = null;
|
|
28585
|
+
}
|
|
28586
|
+
ngOnInit() {
|
|
28587
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28588
|
+
}
|
|
28589
|
+
async loadLayers() {
|
|
28590
|
+
this.errorMessage = null;
|
|
28591
|
+
try {
|
|
28592
|
+
this.loading = true;
|
|
28593
|
+
if (this.wfsUrl.trim() === '') {
|
|
28594
|
+
this.layers = [];
|
|
28595
|
+
return;
|
|
28596
|
+
}
|
|
28597
|
+
this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
|
|
28598
|
+
this.layers = this.wfsEndpoint.getFeatureTypes();
|
|
28599
|
+
console.log(this.layers);
|
|
28600
|
+
}
|
|
28601
|
+
catch (error) {
|
|
28602
|
+
const err = error;
|
|
28603
|
+
this.layers = [];
|
|
28604
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28605
|
+
}
|
|
28606
|
+
finally {
|
|
28607
|
+
this.loading = false;
|
|
28608
|
+
this.changeDetectorRef.markForCheck();
|
|
28609
|
+
}
|
|
28610
|
+
}
|
|
28611
|
+
addLayer(layer) {
|
|
28612
|
+
const layerToAdd = {
|
|
28613
|
+
name: layer.name,
|
|
28614
|
+
url: this.wfsUrl.toString(),
|
|
28615
|
+
type: MapContextLayerTypeEnum.WFS,
|
|
28616
|
+
};
|
|
28617
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28618
|
+
}
|
|
28619
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28620
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28621
|
+
}
|
|
28622
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
28623
|
+
type: Component,
|
|
28624
|
+
args: [{ selector: 'gn-ui-add-layer-from-wfs', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n" }]
|
|
28625
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28626
|
+
|
|
28275
28627
|
class LayersPanelComponent {
|
|
28276
28628
|
constructor(mapFacade) {
|
|
28277
28629
|
this.mapFacade = mapFacade;
|
|
@@ -28281,11 +28633,11 @@ class LayersPanelComponent {
|
|
|
28281
28633
|
this.mapFacade.removeLayer(index);
|
|
28282
28634
|
}
|
|
28283
28635
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28284
|
-
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
|
|
28636
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$3.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28285
28637
|
}
|
|
28286
28638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
28287
28639
|
type: Component,
|
|
28288
|
-
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
|
|
28640
|
+
args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n" }]
|
|
28289
28641
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28290
28642
|
|
|
28291
28643
|
class MapEffects {
|
|
@@ -28318,6 +28670,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28318
28670
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28319
28671
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28320
28672
|
|
|
28673
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28674
|
+
class GeocodingService {
|
|
28675
|
+
constructor(provider) {
|
|
28676
|
+
this.provider = provider;
|
|
28677
|
+
}
|
|
28678
|
+
query(text) {
|
|
28679
|
+
let queryObservable;
|
|
28680
|
+
switch (this.provider[0]) {
|
|
28681
|
+
case 'geoadmin':
|
|
28682
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28683
|
+
break;
|
|
28684
|
+
case 'geonames':
|
|
28685
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28686
|
+
break;
|
|
28687
|
+
case 'data-gouv-fr':
|
|
28688
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28689
|
+
break;
|
|
28690
|
+
default:
|
|
28691
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28692
|
+
}
|
|
28693
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28694
|
+
}
|
|
28695
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, deps: [{ token: GEOCODING_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28696
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28697
|
+
}
|
|
28698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28699
|
+
type: Injectable,
|
|
28700
|
+
args: [{
|
|
28701
|
+
providedIn: 'root',
|
|
28702
|
+
}]
|
|
28703
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28704
|
+
type: Inject,
|
|
28705
|
+
args: [GEOCODING_PROVIDER]
|
|
28706
|
+
}] }]; } });
|
|
28707
|
+
|
|
28708
|
+
class GeocodingComponent {
|
|
28709
|
+
constructor(mapManager, geocodingService) {
|
|
28710
|
+
this.mapManager = mapManager;
|
|
28711
|
+
this.geocodingService = geocodingService;
|
|
28712
|
+
this.searchText = '';
|
|
28713
|
+
this.results = [];
|
|
28714
|
+
this.searchTextChanged = new Subject();
|
|
28715
|
+
this.destroy$ = new Subject();
|
|
28716
|
+
this.errorMessage = null;
|
|
28717
|
+
this.searchTextChanged
|
|
28718
|
+
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28719
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28720
|
+
this.errorMessage =
|
|
28721
|
+
'An error occurred while searching. Please try again.';
|
|
28722
|
+
console.error(error);
|
|
28723
|
+
return [];
|
|
28724
|
+
}));
|
|
28725
|
+
}), takeUntil(this.destroy$))
|
|
28726
|
+
.subscribe((results) => {
|
|
28727
|
+
this.results = results;
|
|
28728
|
+
});
|
|
28729
|
+
}
|
|
28730
|
+
ngOnDestroy() {
|
|
28731
|
+
this.destroy$.next();
|
|
28732
|
+
this.destroy$.complete();
|
|
28733
|
+
}
|
|
28734
|
+
onSearchChange(searchText) {
|
|
28735
|
+
if (!searchText) {
|
|
28736
|
+
this.clearSearch();
|
|
28737
|
+
return;
|
|
28738
|
+
}
|
|
28739
|
+
else {
|
|
28740
|
+
this.searchTextChanged.next(searchText);
|
|
28741
|
+
}
|
|
28742
|
+
}
|
|
28743
|
+
clearSearch() {
|
|
28744
|
+
this.searchText = '';
|
|
28745
|
+
this.results = [];
|
|
28746
|
+
this.errorMessage = null;
|
|
28747
|
+
}
|
|
28748
|
+
zoomToLocation(result) {
|
|
28749
|
+
const map = this.mapManager.map;
|
|
28750
|
+
const view = map.getView();
|
|
28751
|
+
const geometry = result.geom;
|
|
28752
|
+
if (geometry.type === 'Point') {
|
|
28753
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28754
|
+
}
|
|
28755
|
+
else if (geometry.type === 'Polygon') {
|
|
28756
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28757
|
+
}
|
|
28758
|
+
else {
|
|
28759
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28760
|
+
}
|
|
28761
|
+
}
|
|
28762
|
+
zoomToPoint(pointCoords, view) {
|
|
28763
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28764
|
+
view.setCenter(transformedCoords);
|
|
28765
|
+
view.setZoom(12);
|
|
28766
|
+
}
|
|
28767
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28768
|
+
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28769
|
+
const polygon = new Polygon([transformedCoords]);
|
|
28770
|
+
view.fit(polygon, {
|
|
28771
|
+
duration: 100,
|
|
28772
|
+
maxZoom: 12,
|
|
28773
|
+
});
|
|
28774
|
+
}
|
|
28775
|
+
onEnterPress() {
|
|
28776
|
+
if (this.results && this.results.length > 0) {
|
|
28777
|
+
this.zoomToLocation(this.results[0]);
|
|
28778
|
+
}
|
|
28779
|
+
}
|
|
28780
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }, { token: GeocodingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28781
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: GeocodingComponent, selector: "gn-ui-geocoding", ngImport: i0, template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28782
|
+
}
|
|
28783
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28784
|
+
type: Component,
|
|
28785
|
+
args: [{ selector: 'gn-ui-geocoding', template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n" }]
|
|
28786
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28787
|
+
|
|
28321
28788
|
class FeatureMapModule {
|
|
28322
28789
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28323
28790
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
|
|
@@ -28326,7 +28793,10 @@ class FeatureMapModule {
|
|
|
28326
28793
|
AddLayerFromCatalogComponent,
|
|
28327
28794
|
MapContainerComponent,
|
|
28328
28795
|
AddLayerRecordPreviewComponent,
|
|
28329
|
-
AddLayerFromWmsComponent
|
|
28796
|
+
AddLayerFromWmsComponent,
|
|
28797
|
+
AddLayerFromFileComponent,
|
|
28798
|
+
AddLayerFromWfsComponent,
|
|
28799
|
+
GeocodingComponent], imports: [CommonModule,
|
|
28330
28800
|
UiMapModule,
|
|
28331
28801
|
UiLayoutModule,
|
|
28332
28802
|
MatIconModule,
|
|
@@ -28337,13 +28807,18 @@ class FeatureMapModule {
|
|
|
28337
28807
|
MapInstanceDirective,
|
|
28338
28808
|
LayersPanelComponent,
|
|
28339
28809
|
AddLayerFromCatalogComponent,
|
|
28340
|
-
MapContainerComponent
|
|
28810
|
+
MapContainerComponent,
|
|
28811
|
+
GeocodingComponent] }); }
|
|
28341
28812
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
|
|
28342
28813
|
{
|
|
28343
28814
|
provide: FEATURE_MAP_OPTIONS,
|
|
28344
28815
|
useValue: defaultMapOptions,
|
|
28345
28816
|
},
|
|
28346
28817
|
MapFacade,
|
|
28818
|
+
{
|
|
28819
|
+
provide: GEOCODING_PROVIDER,
|
|
28820
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28821
|
+
},
|
|
28347
28822
|
], imports: [CommonModule,
|
|
28348
28823
|
UiMapModule,
|
|
28349
28824
|
UiLayoutModule,
|
|
@@ -28367,6 +28842,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28367
28842
|
MapContainerComponent,
|
|
28368
28843
|
AddLayerRecordPreviewComponent,
|
|
28369
28844
|
AddLayerFromWmsComponent,
|
|
28845
|
+
AddLayerFromFileComponent,
|
|
28846
|
+
AddLayerFromWfsComponent,
|
|
28847
|
+
GeocodingComponent,
|
|
28370
28848
|
],
|
|
28371
28849
|
exports: [
|
|
28372
28850
|
MapContextComponent,
|
|
@@ -28374,6 +28852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28374
28852
|
LayersPanelComponent,
|
|
28375
28853
|
AddLayerFromCatalogComponent,
|
|
28376
28854
|
MapContainerComponent,
|
|
28855
|
+
GeocodingComponent,
|
|
28377
28856
|
],
|
|
28378
28857
|
imports: [
|
|
28379
28858
|
CommonModule,
|
|
@@ -28394,6 +28873,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28394
28873
|
useValue: defaultMapOptions,
|
|
28395
28874
|
},
|
|
28396
28875
|
MapFacade,
|
|
28876
|
+
{
|
|
28877
|
+
provide: GEOCODING_PROVIDER,
|
|
28878
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28879
|
+
},
|
|
28397
28880
|
],
|
|
28398
28881
|
}]
|
|
28399
28882
|
}] });
|
|
@@ -28488,7 +28971,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28488
28971
|
...state,
|
|
28489
28972
|
chartConfig,
|
|
28490
28973
|
})), on(close, (state) => {
|
|
28491
|
-
// eslint-disable-next-line
|
|
28974
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28492
28975
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28493
28976
|
return stateWithoutMd;
|
|
28494
28977
|
}));
|
|
@@ -29755,15 +30238,16 @@ class DataService {
|
|
|
29755
30238
|
// Pour DL toutes les données
|
|
29756
30239
|
return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
|
|
29757
30240
|
...wfsLink,
|
|
30241
|
+
type: 'download',
|
|
29758
30242
|
url: new URL(urls[format]),
|
|
29759
|
-
mimeType: getMimeTypeForFormat(
|
|
30243
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29760
30244
|
}))));
|
|
29761
30245
|
}
|
|
29762
30246
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
29763
30247
|
return ['json', 'geojson'].map((format) => ({
|
|
29764
30248
|
...esriRestLink,
|
|
29765
30249
|
url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
|
|
29766
|
-
mimeType: getMimeTypeForFormat(
|
|
30250
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29767
30251
|
}));
|
|
29768
30252
|
}
|
|
29769
30253
|
readAsGeoJson(link) {
|
|
@@ -30157,12 +30641,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30157
30641
|
}] } });
|
|
30158
30642
|
|
|
30159
30643
|
class MapViewComponent {
|
|
30160
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30644
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30161
30645
|
this.mdViewFacade = mdViewFacade;
|
|
30162
30646
|
this.mapManager = mapManager;
|
|
30163
30647
|
this.mapUtils = mapUtils;
|
|
30164
30648
|
this.dataService = dataService;
|
|
30165
|
-
this.proxy = proxy;
|
|
30166
30649
|
this.featureInfo = featureInfo;
|
|
30167
30650
|
this.changeRef = changeRef;
|
|
30168
30651
|
this.styleService = styleService;
|
|
@@ -30197,7 +30680,7 @@ class MapViewComponent {
|
|
|
30197
30680
|
return of([]);
|
|
30198
30681
|
}), finalize(() => (this.loading = false)));
|
|
30199
30682
|
}));
|
|
30200
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30683
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30201
30684
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30202
30685
|
return of(undefined);
|
|
30203
30686
|
}), map$1((extent) => ({
|
|
@@ -30205,7 +30688,18 @@ class MapViewComponent {
|
|
|
30205
30688
|
view: {
|
|
30206
30689
|
extent,
|
|
30207
30690
|
},
|
|
30208
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30691
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30692
|
+
if (context.view.extent)
|
|
30693
|
+
return context;
|
|
30694
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30695
|
+
return {
|
|
30696
|
+
...context,
|
|
30697
|
+
view: {
|
|
30698
|
+
...context.view,
|
|
30699
|
+
extent,
|
|
30700
|
+
},
|
|
30701
|
+
};
|
|
30702
|
+
}));
|
|
30209
30703
|
}
|
|
30210
30704
|
ngOnDestroy() {
|
|
30211
30705
|
this.subscription.unsubscribe();
|
|
@@ -30258,13 +30752,13 @@ class MapViewComponent {
|
|
|
30258
30752
|
selectLinkToDisplay(link) {
|
|
30259
30753
|
this.selectedLinkIndex$.next(link);
|
|
30260
30754
|
}
|
|
30261
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token:
|
|
30755
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30262
30756
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30263
30757
|
}
|
|
30264
30758
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30265
30759
|
type: Component,
|
|
30266
30760
|
args: [{ selector: 'gn-ui-map-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
|
|
30267
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30761
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30268
30762
|
|
|
30269
30763
|
class DataViewComponent {
|
|
30270
30764
|
constructor(mdViewFacade) {
|
|
@@ -30347,7 +30841,7 @@ class OrganisationPreviewComponent {
|
|
|
30347
30841
|
this.clickedOrganisation.emit(this.organisation);
|
|
30348
30842
|
}
|
|
30349
30843
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30350
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30844
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30351
30845
|
}
|
|
30352
30846
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
|
|
30353
30847
|
type: Component,
|
|
@@ -30416,7 +30910,7 @@ class LanguageSwitcherComponent {
|
|
|
30416
30910
|
ngOnInit() {
|
|
30417
30911
|
const languages = this.languagePlaceholder || DEFAULT_LANGUAGES;
|
|
30418
30912
|
this.languageList = languages.map((language) => ({
|
|
30419
|
-
label:
|
|
30913
|
+
label: `${language}`.toUpperCase(),
|
|
30420
30914
|
value: language,
|
|
30421
30915
|
}));
|
|
30422
30916
|
}
|
|
@@ -30431,11 +30925,11 @@ class LanguageSwitcherComponent {
|
|
|
30431
30925
|
this.translate.use(value);
|
|
30432
30926
|
}
|
|
30433
30927
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30434
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
|
|
30928
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
|
|
30435
30929
|
}
|
|
30436
30930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30437
30931
|
type: Component,
|
|
30438
|
-
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30932
|
+
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30439
30933
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30440
30934
|
type: Optional
|
|
30441
30935
|
}, {
|
|
@@ -30716,13 +31210,6 @@ class MyOrgService {
|
|
|
30716
31210
|
constructor(platformService, orgService) {
|
|
30717
31211
|
this.platformService = platformService;
|
|
30718
31212
|
this.orgService = orgService;
|
|
30719
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
30720
|
-
orgName: '',
|
|
30721
|
-
logoUrl: '',
|
|
30722
|
-
recordCount: 0,
|
|
30723
|
-
userCount: 0,
|
|
30724
|
-
userList: [],
|
|
30725
|
-
});
|
|
30726
31213
|
this.myOrgData$ = combineLatest([
|
|
30727
31214
|
this.platformService.getMe(),
|
|
30728
31215
|
this.platformService.getUsers(),
|
|
@@ -30741,7 +31228,7 @@ class MyOrgService {
|
|
|
30741
31228
|
userList,
|
|
30742
31229
|
userCount,
|
|
30743
31230
|
};
|
|
30744
|
-
}));
|
|
31231
|
+
}), shareReplay(1));
|
|
30745
31232
|
}
|
|
30746
31233
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30747
31234
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31434,11 +31921,11 @@ class RecordFormComponent {
|
|
|
31434
31921
|
return field.config.model;
|
|
31435
31922
|
}
|
|
31436
31923
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31437
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31924
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31438
31925
|
}
|
|
31439
31926
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31440
31927
|
type: Component,
|
|
31441
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31928
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31442
31929
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31443
31930
|
|
|
31444
31931
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -31806,5 +32293,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31806
32293
|
* Generated bundle index. Do not edit.
|
|
31807
32294
|
*/
|
|
31808
32295
|
|
|
31809
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService,
|
|
32296
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
|
|
31810
32297
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|