geonetwork-ui 2.6.0-dev.a6b2f3e85 → 2.6.0-dev.a8e63e487
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/common/distribution.mapper.mjs +3 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +37 -4
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +2 -1
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +3 -3
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +41 -9
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +32 -2
- package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
- package/esm2022/libs/feature/record/src/index.mjs +2 -3
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +31 -5
- package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -13
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
- package/esm2022/libs/feature/search/src/lib/constants.mjs +2 -1
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -2
- package/esm2022/libs/ui/elements/src/index.mjs +3 -1
- package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +55 -0
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +27 -53
- package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +22 -5
- 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 +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +51 -0
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +17 -7
- package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +12 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +68 -0
- package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +3 -3
- package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +3 -3
- package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +65 -14
- package/esm2022/libs/ui/search/src/index.mjs +2 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -8
- package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
- package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +19 -12
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +27 -14
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
- package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
- package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -1
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -1
- package/esm2022/translations/de.json +34 -5
- package/esm2022/translations/en.json +34 -7
- package/esm2022/translations/es.json +33 -4
- package/esm2022/translations/fr.json +34 -7
- package/esm2022/translations/it.json +64 -35
- package/esm2022/translations/nl.json +33 -4
- package/esm2022/translations/pt.json +33 -4
- package/fesm2022/geonetwork-ui.mjs +1580 -665
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -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/types/metadata.model.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
- 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.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +7 -2
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
- package/libs/feature/record/src/index.d.ts +1 -2
- package/libs/feature/record/src/index.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -21
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
- package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +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/geo-data-badge/geo-data-badge.component.d.ts +15 -0
- package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -7
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +16 -0
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +8 -1
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +1 -0
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- 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/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
- package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
- package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +15 -6
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
- package/libs/ui/search/src/index.d.ts +1 -0
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +3 -3
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -1
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +55 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +8 -4
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +65 -7
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +8 -1
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
- package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +10 -0
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +14 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +1 -1
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +37 -0
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
- package/src/libs/feature/record/src/index.ts +1 -2
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +35 -4
- package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +22 -15
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
- package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
- package/src/libs/feature/search/src/lib/constants.ts +1 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +2 -0
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +133 -138
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +19 -47
- package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +7 -5
- package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +21 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +6 -3
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +4 -0
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -1
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +48 -0
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +52 -0
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +8 -29
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +14 -1
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +15 -1
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +9 -1
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -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/search-feature-catalog/search-feature-catalog.component.css +0 -0
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +77 -0
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -2
- package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
- package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +1 -0
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +8 -10
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +75 -7
- package/src/libs/ui/search/src/index.ts +1 -0
- package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
- package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
- package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +11 -3
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +14 -11
- package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +27 -17
- package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +20 -10
- package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
- package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
- package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +3 -0
- package/src/libs/util/shared/src/lib/links/link-utils.ts +3 -0
- package/tailwind.base.css +1 -1
- package/translations/de.json +34 -5
- package/translations/en.json +34 -7
- package/translations/es.json +33 -4
- package/translations/fr.json +34 -7
- package/translations/it.json +64 -35
- package/translations/nl.json +33 -4
- package/translations/pt.json +33 -4
- package/translations/sk.json +33 -4
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export class RecordsRepositoryInterface {
|
|
2
2
|
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLE9BQWdCLDBCQUEwQjtDQTBGL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9ucyxcbiAgQWdncmVnYXRpb25zUGFyYW1zLFxuICBGaWVsZEZpbHRlcnMsXG4gIFNlYXJjaFBhcmFtcyxcbiAgU2VhcmNoUmVzdWx0cyxcbn0gZnJvbSAnLi4vbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY29yZCwgRGF0YXNldEZlYXR1cmVDYXRhbG9nIH0gZnJvbSAnLi4vbW9kZWwvcmVjb3JkJ1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVjb3Jkc1JlcG9zaXRvcnlJbnRlcmZhY2Uge1xuICBhYnN0cmFjdCBzZWFyY2gocGFyYW1zOiBTZWFyY2hQYXJhbXMpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+XG4gIGFic3RyYWN0IGdldE1hdGNoZXNDb3VudChmaWx0ZXJzOiBGaWVsZEZpbHRlcnMpOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+XG4gIGFic3RyYWN0IGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZFxuICApOiBPYnNlcnZhYmxlPERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB8IG51bGw+XG4gIGFic3RyYWN0IGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPlxuICBhYnN0cmFjdCBnZXRTaW1pbGFyUmVjb3JkcyhcbiAgICBzaW1pbGFyVG86IENhdGFsb2dSZWNvcmRcbiAgKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZU9mKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPlxuICBhYnN0cmFjdCBmdXp6eVNlYXJjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPlxuICBhYnN0cmFjdCBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj5cbiAgLyoqXG4gICAqIFRoaXMgZW1pdHMgb25jZTpcbiAgICogLSByZWNvcmQgb2JqZWN0OyBpZiBhIGRyYWZ0IGV4aXN0cywgdGhpcyB3aWxsIHJldHVybiBpdFxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByZWNvcmQgaGFzIGJlZW4gc2F2ZWQgYXQgbGVhc3Qgb25jZSBpbiBhIGZpbmFsIHZlcnNpb24gKGkuZS4gbm90IG9ubHkgYXMgZHJhZnQpXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuICAgKi9cbiAgYWJzdHJhY3Qgb3BlblJlY29yZEZvckVkaXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBUaGlzIGVtaXRzIG9uY2U6XG4gICAqIC0gcmVjb3JkIG9iamVjdCB3aXRoIGEgbmV3IHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBzdWZmaXhlZCB0aXRsZVxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gZmFsc2UsIGFzIHRoZSBkdXBsaWNhdGVkIHJlY29yZCBpcyBhbHdheXMgYSBkcmFmdFxuICAgKiBAcGFyYW0gdW5pcXVlSWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGZhbHNlXSB8IG51bGw+XG4gICAqL1xuICBhYnN0cmFjdCBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmVjb3JkXG4gICAqIEBwYXJhbSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxzdHJpbmc+IFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHdoZW4gc2F2ZWRcbiAgICovXG4gIGFic3RyYWN0IHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZyxcbiAgICBwdWJsaXNoVG9BbGw/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPlxuXG4gIC8qKlxuICAgKiBUcnkgdG8gZHVwbGljYXRlIHRoZSBleHRlcm5hbCByZWNvcmQgZnJvbSBnaXZlbiB1cmwuIElmIGl0IHN1Y2VlZCwgdGhlbiBpdCB3aWxsIHNhdmUgdGhlIHJlY29yZCBhcyBkcmFmdCBhbmQgcmV0dXJuIGl0cyB0ZW1wb3JhcnkgaWQuXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmREb3dubG9hZFVybFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz5cbiAgICovXG4gIGFic3RyYWN0IGR1cGxpY2F0ZUV4dGVybmFsUmVjb3JkKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8dm9pZD4gUmV0dXJucyB3aGVuIHJlY29yZCBpcyBkZWxldGVkXG4gICAqL1xuICBhYnN0cmFjdCBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPlxuXG4gIGFic3RyYWN0IGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBwYXJhbSByZWNvcmRcbiAgICogQHBhcmFtIHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz4gUmV0dXJucyB0aGUgc291cmNlIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHNlcmlhbGl6ZWQgd2hlbiBzYXZlZFxuICAgKi9cbiAgYWJzdHJhY3Qgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz5cblxuICBhYnN0cmFjdCBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWRcbiAgYWJzdHJhY3QgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhblxuXG4gIC8qKiB3aWxsIHJldHVybiBhbGwgcGVuZGluZyBkcmFmdHMsIGJvdGggcHVibGlzaGVkIGFuZCBub3QgcHVibGlzaGVkICovXG4gIGFic3RyYWN0IGdldEFsbERyYWZ0cygpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT5cbiAgYWJzdHJhY3QgZ2V0RHJhZnRzQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+XG4gIGFic3RyYWN0IGRyYWZ0c0NoYW5nZWQkOiBPYnNlcnZhYmxlPHZvaWQ+XG4gIGFic3RyYWN0IGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KFxuICAgIGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkXG4gICk6IE9ic2VydmFibGU8eyB1c2VyOiBzdHJpbmc7IGRhdGU6IERhdGUgfT5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkUHVibGljYXRpb25TdGF0dXModXVpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPlxuICBhYnN0cmFjdCBnZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPlxufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
3
|
-
import { OgcApiEndpoint, WfsEndpoint, } from '@camptocamp/ogc-client';
|
|
3
|
+
import { OgcApiEndpoint, WfsEndpoint, TmsEndpoint, } from '@camptocamp/ogc-client';
|
|
4
4
|
import { openDataset, SupportedTypes, } from '../../../../../../libs/util/data-fetcher/src';
|
|
5
5
|
import { getFileFormat, getFileFormatFromServiceOutput, getMimeTypeForFormat, ProxyService, } from '../../../../../../libs/util/shared/src';
|
|
6
6
|
import { from, throwError } from 'rxjs';
|
|
@@ -147,6 +147,36 @@ export class DataService {
|
|
|
147
147
|
throw new Error(`ogc.unreachable.unknown`);
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
|
+
async getGeodataLinksFromTms(tmsLink, keepOriginalLink = false) {
|
|
151
|
+
const endpoint = new TmsEndpoint(tmsLink.url.toString());
|
|
152
|
+
const tileMaps = await endpoint.allTileMaps;
|
|
153
|
+
if (!tileMaps?.length)
|
|
154
|
+
return null;
|
|
155
|
+
// TODO: at some point use the identifierInService field if more that one layers in the TMS service
|
|
156
|
+
const tileMapInfo = await endpoint.getTileMapInfo(tileMaps[0].href);
|
|
157
|
+
// case 1: no styles; return a plain TMS link
|
|
158
|
+
if (!tileMapInfo?.metadata?.length)
|
|
159
|
+
return [tmsLink];
|
|
160
|
+
// case 2: styles present; return each as a separate link
|
|
161
|
+
const styleLinks = tileMapInfo.metadata
|
|
162
|
+
.filter((meta) => meta.href)
|
|
163
|
+
.map((meta) => {
|
|
164
|
+
const fileName = meta.href.split('/').pop() || '';
|
|
165
|
+
const linkName = tmsLink.description || ('name' in tmsLink ? tmsLink.name : '');
|
|
166
|
+
const styleName = fileName.split('.')[0];
|
|
167
|
+
const name = `${linkName} - ${styleName}`;
|
|
168
|
+
return {
|
|
169
|
+
type: 'service',
|
|
170
|
+
url: new URL(meta.href),
|
|
171
|
+
name,
|
|
172
|
+
accessServiceProtocol: 'maplibre-style',
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
if (keepOriginalLink) {
|
|
176
|
+
styleLinks.unshift(tmsLink);
|
|
177
|
+
}
|
|
178
|
+
return styleLinks;
|
|
179
|
+
}
|
|
150
180
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
151
181
|
return ['json', 'geojson'].map((format) => ({
|
|
152
182
|
...esriRestLink,
|
|
@@ -202,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
202
232
|
providedIn: 'root',
|
|
203
233
|
}]
|
|
204
234
|
}], ctorParameters: () => [{ type: i1.ProxyService }] });
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2RhdGF2aXovc3JjL2xpYi9zZXJ2aWNlL2RhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNoRSxPQUFPLEVBRUwsY0FBYyxFQUVkLFdBQVcsR0FFWixNQUFNLHdCQUF3QixDQUFBO0FBQy9CLE9BQU8sRUFHTCxXQUFXLEVBRVgsY0FBYyxHQUNmLE1BQU0sOENBQThDLENBQUE7QUFDckQsT0FBTyxFQUNMLGFBQWEsRUFDYiw4QkFBOEIsRUFDOUIsb0JBQW9CLEVBQ3BCLFlBQVksR0FDYixNQUFNLHdDQUF3QyxDQUFBO0FBRS9DLE9BQU8sRUFBRSxJQUFJLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7O0FBTWhFLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0FBQzlCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0FBQzlCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0FBQ2pDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0FBQ2pDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0FBQ2xDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0FBQ3JDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0FBQ2pDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO0FBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0FBQzVCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBQzdCLE1B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TyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDekUsQ0FBQzthQUFNLElBQ0wsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxhQUFhLEVBQzVDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0QsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQTtnQkFDbEQsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDbkUsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtnQkFDaEQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUNuRCxDQUFDOytHQWxRVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgbWFya2VyIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJ1xuaW1wb3J0IHtcbiAgT2djQXBpQ29sbGVjdGlvbkluZm8sXG4gIE9nY0FwaUVuZHBvaW50LFxuICBPZ2NBcGlSZWNvcmQsXG4gIFdmc0VuZHBvaW50LFxuICBXZnNWZXJzaW9uLFxufSBmcm9tICdAY2FtcHRvY2FtcC9vZ2MtY2xpZW50J1xuaW1wb3J0IHtcbiAgQmFzZVJlYWRlcixcbiAgRmV0Y2hFcnJvcixcbiAgb3BlbkRhdGFzZXQsXG4gIFN1cHBvcnRlZFR5cGUsXG4gIFN1cHBvcnRlZFR5cGVzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvZGF0YS1mZXRjaGVyL3NyYydcbmltcG9ydCB7XG4gIGdldEZpbGVGb3JtYXQsXG4gIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dCxcbiAgZ2V0TWltZVR5cGVGb3JGb3JtYXQsXG4gIFByb3h5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHtcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuXG5tYXJrZXIoJ3dmcy51bnJlYWNoYWJsZS5jb3JzJylcbm1hcmtlcignd2ZzLnVucmVhY2hhYmxlLmh0dHAnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLmZvcmJpZGRlbicpXG5tYXJrZXIoJ3dmcy51bnJlYWNoYWJsZS51bmtub3duJylcbm1hcmtlcignd2ZzLmZlYXR1cmV0eXBlLm5vdGZvdW5kJylcbm1hcmtlcignd2ZzLmdlb2pzb25nbWwubm90c3VwcG9ydGVkJylcbm1hcmtlcignb2djLnVucmVhY2hhYmxlLnVua25vd24nKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLm5ldHdvcmsnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLmh0dHAnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLnBhcnNlJylcbm1hcmtlcignZGF0YXNldC5lcnJvci51bnN1cHBvcnRlZFR5cGUnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLnVua25vd24nKVxuXG5pbnRlcmZhY2UgV2ZzRG93bmxvYWRVcmxzIHtcbiAgYWxsOiB7IFtmb3JtYXQ6IHN0cmluZ106IHN0cmluZyB9XG4gIGdlb2pzb246IHN0cmluZ1xuICBnbWw6IHsgZmVhdHVyZVVybDogc3RyaW5nOyBuYW1lc3BhY2U6IHN0cmluZzsgd2ZzVmVyc2lvbjogV2ZzVmVyc2lvbiB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJveHk6IFByb3h5U2VydmljZSkge31cblxuICBnZXRXZnNFbmRwb2ludCh3ZnNVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8V2ZzRW5kcG9pbnQ+IHtcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIG5ldyBXZnNFbmRwb2ludCh0aGlzLnByb3h5LmdldFByb3hpZWRVcmwod2ZzVXJsKSkuaXNSZWFkeSgpXG4gICAgKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEZldGNoRXJyb3IgfCBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLnVua25vd25gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlcnJvci50eXBlID09PSAnbmV0d29yaycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLmNvcnNgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS5odHRwYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICdwYXJzZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLnBhcnNlYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICd1bnN1cHBvcnRlZFR5cGUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS51bnN1cHBvcnRlZFR5cGVgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS51bmtub3duYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0RG93bmxvYWRVcmxzRnJvbVdmcyhcbiAgICB3ZnNVcmw6IHN0cmluZyxcbiAgICBmZWF0dXJlVHlwZU5hbWU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFdmc0Rvd25sb2FkVXJscz4ge1xuICAgIHJldHVybiB0aGlzLmdldFdmc0VuZHBvaW50KHdmc1VybCkucGlwZShcbiAgICAgIG1hcCgoZW5kcG9pbnQpID0+IHtcbiAgICAgICAgY29uc3QgZmVhdHVyZVR5cGVzID0gZW5kcG9pbnQuZ2V0RmVhdHVyZVR5cGVzKClcbiAgICAgICAgY29uc3QgZmVhdHVyZVR5cGUgPSBlbmRwb2ludC5nZXRGZWF0dXJlVHlwZVN1bW1hcnkoXG4gICAgICAgICAgZmVhdHVyZVR5cGVzLmxlbmd0aCA9PT0gMSAmJiAhZmVhdHVyZVR5cGVOYW1lXG4gICAgICAgICAgICA/IGZlYXR1cmVUeXBlc1swXS5uYW1lXG4gICAgICAgICAgICA6IGZlYXR1cmVUeXBlTmFtZVxuICAgICAgICApXG4gICAgICAgIGlmICghZmVhdHVyZVR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dmcy5mZWF0dXJldHlwZS5ub3Rmb3VuZCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbGw6IGZlYXR1cmVUeXBlLm91dHB1dEZvcm1hdHMucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyXTogZW5kcG9pbnQuZ2V0RmVhdHVyZVVybChmZWF0dXJlVHlwZS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiBjdXJyLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApLFxuICAgICAgICAgIGdlb2pzb246IGVuZHBvaW50LnN1cHBvcnRzSnNvbihmZWF0dXJlVHlwZS5uYW1lKVxuICAgICAgICAgICAgPyBlbmRwb2ludC5nZXRGZWF0dXJlVXJsKGZlYXR1cmVUeXBlLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBhc0pzb246IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0cHV0Q3JzOiAnRVBTRzo0MzI2JyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBnbWw6XG4gICAgICAgICAgICBmZWF0dXJlVHlwZS5vdXRwdXRGb3JtYXRzLmZpbmQoKGYpID0+XG4gICAgICAgICAgICAgIGYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZ21sJylcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIChmZWF0dXJlVHlwZS5kZWZhdWx0Q3JzID09PSAnRVBTRzo0MzI2JyB8fFxuICAgICAgICAgICAgICBmZWF0dXJlVHlwZS5vdGhlckNycz8uaW5jbHVkZXMoJ0VQU0c6NDMyNicpKVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVVcmw6IGVuZHBvaW50LmdldEZlYXR1cmVVcmwoZmVhdHVyZVR5cGUubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ6IGZlYXR1cmVUeXBlLm91dHB1dEZvcm1hdHMuZmluZCgoZikgPT5cbiAgICAgICAgICAgICAgICAgICAgICBmLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2dtbCcpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dENyczogJ0VQU0c6NDMyNicsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogZmVhdHVyZVR5cGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHdmc1ZlcnNpb246IGVuZHBvaW50LmdldFZlcnNpb24oKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRXZnNGZWF0dXJlQ291bnQoXG4gICAgd2ZzVXJsOiBzdHJpbmcsXG4gICAgZmVhdHVyZVR5cGVOYW1lOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRXZnNFbmRwb2ludCh3ZnNVcmwpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGVuZHBvaW50KSA9PlxuICAgICAgICBmcm9tKGVuZHBvaW50LmdldEZlYXR1cmVUeXBlRnVsbChmZWF0dXJlVHlwZU5hbWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoZmVhdHVyZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICghZmVhdHVyZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3ZnMuZmVhdHVyZXR5cGUubm90Zm91bmQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVUeXBlLm9iamVjdENvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGdldERvd25sb2FkVXJsRnJvbUVzcmlSZXN0KGFwaVVybDogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0UHJveGllZFVybChcbiAgICAgIGAke2FwaVVybH0vcXVlcnk/Zj0ke2Zvcm1hdH0md2hlcmU9MT0xJm91dEZpZWxkcz0qYFxuICAgIClcbiAgfVxuXG4gIGdldERvd25sb2FkTGlua3NGcm9tV2ZzKFxuICAgIHdmc0xpbms6IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4gICk6IE9ic2VydmFibGU8RGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgICAvLyBQb3VyIERMIHRvdXRlcyBsZXMgZG9ubsOpZXNcbiAgICByZXR1cm4gdGhpcy5nZXREb3dubG9hZFVybHNGcm9tV2ZzKFxuICAgICAgd2ZzTGluay51cmwudG9TdHJpbmcoKSxcbiAgICAgIHdmc0xpbmsubmFtZVxuICAgICkucGlwZShcbiAgICAgIG1hcCgodXJscykgPT4ge1xuICAgICAgICBpZiAodXJscy5nZW9qc29uKSB7XG4gICAgICAgICAgdXJscy5hbGxbJ2FwcGxpY2F0aW9uL2pzb24nXSA9IHVybHMuZ2VvanNvblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxzXG4gICAgICB9KSxcbiAgICAgIG1hcCgodXJscykgPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXM6IERhdGFzZXRPbmxpbmVSZXNvdXJjZVtdID0gT2JqZWN0LmtleXModXJscy5hbGwpLm1hcChcbiAgICAgICAgICAoZm9ybWF0KSA9PiAoe1xuICAgICAgICAgICAgLi4ud2ZzTGluayxcbiAgICAgICAgICAgIG5hbWU6IHdmc0xpbmsubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcgYXMgY29uc3QsXG4gICAgICAgICAgICB1cmw6IG5ldyBVUkwodXJscy5hbGxbZm9ybWF0XSksXG4gICAgICAgICAgICBtaW1lVHlwZTogZ2V0TWltZVR5cGVGb3JGb3JtYXQoXG4gICAgICAgICAgICAgIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dChmb3JtYXQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIHJlc291cmNlc1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBhc3luYyBnZXREb3dubG9hZExpbmtzRnJvbU9nY0FwaUZlYXR1cmVzKFxuICAgIG9nY0FwaUxpbms6IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4gICk6IFByb21pc2U8RGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0RG93bmxvYWRVcmxzRnJvbU9nY0FwaShcbiAgICAgIG9nY0FwaUxpbmsudXJsLmhyZWZcbiAgICApXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JbmZvLmJ1bGtEb3dubG9hZExpbmtzKS5tYXAoKGRvd25sb2FkTGluaykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2djQXBpTGluayxcbiAgICAgICAgbmFtZTogY29sbGVjdGlvbkluZm8uaWQsXG4gICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgIHVybDogbmV3IFVSTChjb2xsZWN0aW9uSW5mby5idWxrRG93bmxvYWRMaW5rc1tkb3dubG9hZExpbmtdKSxcbiAgICAgICAgbWltZVR5cGU6IGdldE1pbWVUeXBlRm9yRm9ybWF0KFxuICAgICAgICAgIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dChkb3dubG9hZExpbmspXG4gICAgICAgICksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldERvd25sb2FkVXJsc0Zyb21PZ2NBcGkodXJsOiBzdHJpbmcpOiBQcm9taXNlPE9nY0FwaUNvbGxlY3Rpb25JbmZvPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgT2djQXBpRW5kcG9pbnQodXJsKVxuICAgIHJldHVybiBhd2FpdCBlbmRwb2ludC5hbGxDb2xsZWN0aW9uc1xuICAgICAgLnRoZW4oKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBlbmRwb2ludC5nZXRDb2xsZWN0aW9uSW5mbyhjb2xsZWN0aW9uc1swXS5uYW1lKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvZ2MudW5yZWFjaGFibGUudW5rbm93bmApXG4gICAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0SXRlbXNGcm9tT2djQXBpKHVybDogc3RyaW5nKTogUHJvbWlzZTxPZ2NBcGlSZWNvcmQ+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBPZ2NBcGlFbmRwb2ludCh1cmwpXG4gICAgcmV0dXJuIGF3YWl0IGVuZHBvaW50LmZlYXR1cmVDb2xsZWN0aW9uc1xuICAgICAgLnRoZW4oKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5sZW5ndGhcbiAgICAgICAgICA/IGVuZHBvaW50LmdldENvbGxlY3Rpb25JdGVtKGNvbGxlY3Rpb25zWzBdLCAnMScpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG9nYy51bnJlYWNoYWJsZS51bmtub3duYClcbiAgICAgIH0pXG4gIH1cblxuICBnZXREb3dubG9hZExpbmtzRnJvbUVzcmlSZXN0KFxuICAgIGVzcmlSZXN0TGluazogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbiAgKTogRGF0YXNldE9ubGluZVJlc291cmNlW10ge1xuICAgIHJldHVybiBbJ2pzb24nLCAnZ2VvanNvbiddLm1hcCgoZm9ybWF0KSA9PiAoe1xuICAgICAgLi4uZXNyaVJlc3RMaW5rLFxuICAgICAgdXJsOiBuZXcgVVJMKFxuICAgICAgICB0aGlzLmdldERvd25sb2FkVXJsRnJvbUVzcmlSZXN0KGVzcmlSZXN0TGluay51cmwudG9TdHJpbmcoKSwgZm9ybWF0KVxuICAgICAgKSxcbiAgICAgIG1pbWVUeXBlOiBnZXRNaW1lVHlwZUZvckZvcm1hdChnZXRGaWxlRm9ybWF0RnJvbVNlcnZpY2VPdXRwdXQoZm9ybWF0KSksXG4gICAgfSkpXG4gIH1cblxuICByZWFkQXNHZW9Kc29uKFxuICAgIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgICBjYWNoZUFjdGl2ZTogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEZlYXR1cmVDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldChsaW5rLCBjYWNoZUFjdGl2ZSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGF0YXNldCkgPT4gZGF0YXNldC5zZWxlY3RBbGwoKS5yZWFkKCkpLFxuICAgICAgbWFwKChmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXMsXG4gICAgICB9KSlcbiAgICApXG4gIH1cblxuICBnZXREYXRhc2V0KFxuICAgIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgICBjYWNoZUFjdGl2ZTogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEJhc2VSZWFkZXI+IHtcbiAgICBpZiAobGluay50eXBlID09PSAnc2VydmljZScgJiYgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICd3ZnMnKSB7XG4gICAgICBjb25zdCB3ZnNVcmxFbmRwb2ludCA9IHRoaXMucHJveHkuZ2V0UHJveGllZFVybChsaW5rLnVybC50b1N0cmluZygpKVxuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG9wZW5EYXRhc2V0KFxuICAgICAgICAgIHdmc1VybEVuZHBvaW50LFxuICAgICAgICAgICd3ZnMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdmc0ZlYXR1cmVUeXBlOiBsaW5rLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYWNoZUFjdGl2ZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChsaW5rLnR5cGUgPT09ICdkb3dubG9hZCcpIHtcbiAgICAgIGNvbnN0IGxpbmtQcm94aWZpZWRVcmwgPSB0aGlzLnByb3h5LmdldFByb3hpZWRVcmwobGluay51cmwudG9TdHJpbmcoKSlcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGdldEZpbGVGb3JtYXQobGluaylcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFR5cGUgPVxuICAgICAgICBTdXBwb3J0ZWRUeXBlcy5pbmRleE9mKGZvcm1hdCBhcyBhbnkpID4gLTFcbiAgICAgICAgICA/IChmb3JtYXQgYXMgU3VwcG9ydGVkVHlwZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG9wZW5EYXRhc2V0KGxpbmtQcm94aWZpZWRVcmwsIHN1cHBvcnRlZFR5cGUsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpXG4gICAgICApLnBpcGUoKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdlc3JpUmVzdCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0RG93bmxvYWRVcmxGcm9tRXNyaVJlc3QoXG4gICAgICAgIGxpbmsudXJsLnRvU3RyaW5nKCksXG4gICAgICAgICdnZW9qc29uJ1xuICAgICAgKVxuICAgICAgcmV0dXJuIGZyb20ob3BlbkRhdGFzZXQodXJsLCAnZ2VvanNvbicsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpKS5waXBlKClcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnb2djRmVhdHVyZXMnXG4gICAgKSB7XG4gICAgICByZXR1cm4gZnJvbSh0aGlzLmdldERvd25sb2FkVXJsc0Zyb21PZ2NBcGkobGluay51cmwuaHJlZikpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGlvbkluZm8pID0+IHtcbiAgICAgICAgICBjb25zdCBnZW9qc29uVXJsID0gY29sbGVjdGlvbkluZm8uanNvbkRvd25sb2FkTGlua1xuICAgICAgICAgIHJldHVybiBvcGVuRGF0YXNldChnZW9qc29uVXJsLCAnZ2VvanNvbicsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpXG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVybCkgPT4ge1xuICAgICAgICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd2ZzLmdlb2pzb25nbWwubm90c3VwcG9ydGVkJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdwcm90b2NvbCBub3Qgc3VwcG9ydGVkJylcbiAgfVxufVxuIl19
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2RhdGF2aXovc3JjL2xpYi9zZXJ2aWNlL2RhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNoRSxPQUFPLEVBRUwsY0FBYyxFQUVkLFdBQVcsRUFFWCxXQUFXLEdBQ1osTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVBR0wsV0FBVyxFQUVYLGNBQWMsR0FDZixNQUFNLDhDQUE4QyxDQUFBO0FBQ3JELE9BQU8sRUFDTCxhQUFhLEVBQ2IsOEJBQThCLEVBQzlCLG9CQUFvQixFQUNwQixZQUFZLEdBQ2IsTUFBTSx3Q0FBd0MsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsSUFBSSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7OztBQU1oRSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtBQUM5QixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtBQUM5QixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUNqQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUNqQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtBQUNsQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtBQUNyQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUNqQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtBQUMvQixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUM1QixNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FB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QUFBO0lBQ25ELENBQUM7K0dBdFNVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBtYXJrZXIgfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInXG5pbXBvcnQge1xuICBPZ2NBcGlDb2xsZWN0aW9uSW5mbyxcbiAgT2djQXBpRW5kcG9pbnQsXG4gIE9nY0FwaVJlY29yZCxcbiAgV2ZzRW5kcG9pbnQsXG4gIFdmc1ZlcnNpb24sXG4gIFRtc0VuZHBvaW50LFxufSBmcm9tICdAY2FtcHRvY2FtcC9vZ2MtY2xpZW50J1xuaW1wb3J0IHtcbiAgQmFzZVJlYWRlcixcbiAgRmV0Y2hFcnJvcixcbiAgb3BlbkRhdGFzZXQsXG4gIFN1cHBvcnRlZFR5cGUsXG4gIFN1cHBvcnRlZFR5cGVzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvZGF0YS1mZXRjaGVyL3NyYydcbmltcG9ydCB7XG4gIGdldEZpbGVGb3JtYXQsXG4gIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dCxcbiAgZ2V0TWltZVR5cGVGb3JGb3JtYXQsXG4gIFByb3h5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHtcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuXG5tYXJrZXIoJ3dmcy51bnJlYWNoYWJsZS5jb3JzJylcbm1hcmtlcignd2ZzLnVucmVhY2hhYmxlLmh0dHAnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLmZvcmJpZGRlbicpXG5tYXJrZXIoJ3dmcy51bnJlYWNoYWJsZS51bmtub3duJylcbm1hcmtlcignd2ZzLmZlYXR1cmV0eXBlLm5vdGZvdW5kJylcbm1hcmtlcignd2ZzLmdlb2pzb25nbWwubm90c3VwcG9ydGVkJylcbm1hcmtlcignb2djLnVucmVhY2hhYmxlLnVua25vd24nKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLm5ldHdvcmsnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLmh0dHAnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLnBhcnNlJylcbm1hcmtlcignZGF0YXNldC5lcnJvci51bnN1cHBvcnRlZFR5cGUnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLnVua25vd24nKVxuXG5pbnRlcmZhY2UgV2ZzRG93bmxvYWRVcmxzIHtcbiAgYWxsOiB7IFtmb3JtYXQ6IHN0cmluZ106IHN0cmluZyB9XG4gIGdlb2pzb246IHN0cmluZ1xuICBnbWw6IHsgZmVhdHVyZVVybDogc3RyaW5nOyBuYW1lc3BhY2U6IHN0cmluZzsgd2ZzVmVyc2lvbjogV2ZzVmVyc2lvbiB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJveHk6IFByb3h5U2VydmljZSkge31cblxuICBnZXRXZnNFbmRwb2ludCh3ZnNVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8V2ZzRW5kcG9pbnQ+IHtcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIG5ldyBXZnNFbmRwb2ludCh0aGlzLnByb3h5LmdldFByb3hpZWRVcmwod2ZzVXJsKSkuaXNSZWFkeSgpXG4gICAgKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEZldGNoRXJyb3IgfCBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLnVua25vd25gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlcnJvci50eXBlID09PSAnbmV0d29yaycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLmNvcnNgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXJyb3IudHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS5odHRwYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICdwYXJzZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2ZzLnVucmVhY2hhYmxlLnBhcnNlYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICd1bnN1cHBvcnRlZFR5cGUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS51bnN1cHBvcnRlZFR5cGVgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdmcy51bnJlYWNoYWJsZS51bmtub3duYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0RG93bmxvYWRVcmxzRnJvbVdmcyhcbiAgICB3ZnNVcmw6IHN0cmluZyxcbiAgICBmZWF0dXJlVHlwZU5hbWU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFdmc0Rvd25sb2FkVXJscz4ge1xuICAgIHJldHVybiB0aGlzLmdldFdmc0VuZHBvaW50KHdmc1VybCkucGlwZShcbiAgICAgIG1hcCgoZW5kcG9pbnQpID0+IHtcbiAgICAgICAgY29uc3QgZmVhdHVyZVR5cGVzID0gZW5kcG9pbnQuZ2V0RmVhdHVyZVR5cGVzKClcbiAgICAgICAgY29uc3QgZmVhdHVyZVR5cGUgPSBlbmRwb2ludC5nZXRGZWF0dXJlVHlwZVN1bW1hcnkoXG4gICAgICAgICAgZmVhdHVyZVR5cGVzLmxlbmd0aCA9PT0gMSAmJiAhZmVhdHVyZVR5cGVOYW1lXG4gICAgICAgICAgICA/IGZlYXR1cmVUeXBlc1swXS5uYW1lXG4gICAgICAgICAgICA6IGZlYXR1cmVUeXBlTmFtZVxuICAgICAgICApXG4gICAgICAgIGlmICghZmVhdHVyZVR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dmcy5mZWF0dXJldHlwZS5ub3Rmb3VuZCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhbGw6IGZlYXR1cmVUeXBlLm91dHB1dEZvcm1hdHMucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyXTogZW5kcG9pbnQuZ2V0RmVhdHVyZVVybChmZWF0dXJlVHlwZS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiBjdXJyLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApLFxuICAgICAgICAgIGdlb2pzb246IGVuZHBvaW50LnN1cHBvcnRzSnNvbihmZWF0dXJlVHlwZS5uYW1lKVxuICAgICAgICAgICAgPyBlbmRwb2ludC5nZXRGZWF0dXJlVXJsKGZlYXR1cmVUeXBlLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBhc0pzb246IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0cHV0Q3JzOiAnRVBTRzo0MzI2JyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBnbWw6XG4gICAgICAgICAgICBmZWF0dXJlVHlwZS5vdXRwdXRGb3JtYXRzLmZpbmQoKGYpID0+XG4gICAgICAgICAgICAgIGYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZ21sJylcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIChmZWF0dXJlVHlwZS5kZWZhdWx0Q3JzID09PSAnRVBTRzo0MzI2JyB8fFxuICAgICAgICAgICAgICBmZWF0dXJlVHlwZS5vdGhlckNycz8uaW5jbHVkZXMoJ0VQU0c6NDMyNicpKVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVVcmw6IGVuZHBvaW50LmdldEZlYXR1cmVVcmwoZmVhdHVyZVR5cGUubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ6IGZlYXR1cmVUeXBlLm91dHB1dEZvcm1hdHMuZmluZCgoZikgPT5cbiAgICAgICAgICAgICAgICAgICAgICBmLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2dtbCcpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dENyczogJ0VQU0c6NDMyNicsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogZmVhdHVyZVR5cGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHdmc1ZlcnNpb246IGVuZHBvaW50LmdldFZlcnNpb24oKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRXZnNGZWF0dXJlQ291bnQoXG4gICAgd2ZzVXJsOiBzdHJpbmcsXG4gICAgZmVhdHVyZVR5cGVOYW1lOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRXZnNFbmRwb2ludCh3ZnNVcmwpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGVuZHBvaW50KSA9PlxuICAgICAgICBmcm9tKGVuZHBvaW50LmdldEZlYXR1cmVUeXBlRnVsbChmZWF0dXJlVHlwZU5hbWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoZmVhdHVyZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICghZmVhdHVyZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3ZnMuZmVhdHVyZXR5cGUubm90Zm91bmQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVUeXBlLm9iamVjdENvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGdldERvd25sb2FkVXJsRnJvbUVzcmlSZXN0KGFwaVVybDogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJveHkuZ2V0UHJveGllZFVybChcbiAgICAgIGAke2FwaVVybH0vcXVlcnk/Zj0ke2Zvcm1hdH0md2hlcmU9MT0xJm91dEZpZWxkcz0qYFxuICAgIClcbiAgfVxuXG4gIGdldERvd25sb2FkTGlua3NGcm9tV2ZzKFxuICAgIHdmc0xpbms6IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4gICk6IE9ic2VydmFibGU8RGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgICAvLyBQb3VyIERMIHRvdXRlcyBsZXMgZG9ubsOpZXNcbiAgICByZXR1cm4gdGhpcy5nZXREb3dubG9hZFVybHNGcm9tV2ZzKFxuICAgICAgd2ZzTGluay51cmwudG9TdHJpbmcoKSxcbiAgICAgIHdmc0xpbmsubmFtZVxuICAgICkucGlwZShcbiAgICAgIG1hcCgodXJscykgPT4ge1xuICAgICAgICBpZiAodXJscy5nZW9qc29uKSB7XG4gICAgICAgICAgdXJscy5hbGxbJ2FwcGxpY2F0aW9uL2pzb24nXSA9IHVybHMuZ2VvanNvblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxzXG4gICAgICB9KSxcbiAgICAgIG1hcCgodXJscykgPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXM6IERhdGFzZXRPbmxpbmVSZXNvdXJjZVtdID0gT2JqZWN0LmtleXModXJscy5hbGwpLm1hcChcbiAgICAgICAgICAoZm9ybWF0KSA9PiAoe1xuICAgICAgICAgICAgLi4ud2ZzTGluayxcbiAgICAgICAgICAgIG5hbWU6IHdmc0xpbmsubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcgYXMgY29uc3QsXG4gICAgICAgICAgICB1cmw6IG5ldyBVUkwodXJscy5hbGxbZm9ybWF0XSksXG4gICAgICAgICAgICBtaW1lVHlwZTogZ2V0TWltZVR5cGVGb3JGb3JtYXQoXG4gICAgICAgICAgICAgIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dChmb3JtYXQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIHJlc291cmNlc1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBhc3luYyBnZXREb3dubG9hZExpbmtzRnJvbU9nY0FwaUZlYXR1cmVzKFxuICAgIG9nY0FwaUxpbms6IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4gICk6IFByb21pc2U8RGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0RG93bmxvYWRVcmxzRnJvbU9nY0FwaShcbiAgICAgIG9nY0FwaUxpbmsudXJsLmhyZWZcbiAgICApXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25JbmZvLmJ1bGtEb3dubG9hZExpbmtzKS5tYXAoKGRvd25sb2FkTGluaykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2djQXBpTGluayxcbiAgICAgICAgbmFtZTogY29sbGVjdGlvbkluZm8uaWQsXG4gICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgIHVybDogbmV3IFVSTChjb2xsZWN0aW9uSW5mby5idWxrRG93bmxvYWRMaW5rc1tkb3dubG9hZExpbmtdKSxcbiAgICAgICAgbWltZVR5cGU6IGdldE1pbWVUeXBlRm9yRm9ybWF0KFxuICAgICAgICAgIGdldEZpbGVGb3JtYXRGcm9tU2VydmljZU91dHB1dChkb3dubG9hZExpbmspXG4gICAgICAgICksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldERvd25sb2FkVXJsc0Zyb21PZ2NBcGkodXJsOiBzdHJpbmcpOiBQcm9taXNlPE9nY0FwaUNvbGxlY3Rpb25JbmZvPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgT2djQXBpRW5kcG9pbnQodXJsKVxuICAgIHJldHVybiBhd2FpdCBlbmRwb2ludC5hbGxDb2xsZWN0aW9uc1xuICAgICAgLnRoZW4oKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBlbmRwb2ludC5nZXRDb2xsZWN0aW9uSW5mbyhjb2xsZWN0aW9uc1swXS5uYW1lKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvZ2MudW5yZWFjaGFibGUudW5rbm93bmApXG4gICAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0SXRlbXNGcm9tT2djQXBpKHVybDogc3RyaW5nKTogUHJvbWlzZTxPZ2NBcGlSZWNvcmQ+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBPZ2NBcGlFbmRwb2ludCh1cmwpXG4gICAgcmV0dXJuIGF3YWl0IGVuZHBvaW50LmZlYXR1cmVDb2xsZWN0aW9uc1xuICAgICAgLnRoZW4oKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5sZW5ndGhcbiAgICAgICAgICA/IGVuZHBvaW50LmdldENvbGxlY3Rpb25JdGVtKGNvbGxlY3Rpb25zWzBdLCAnMScpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG9nYy51bnJlYWNoYWJsZS51bmtub3duYClcbiAgICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRHZW9kYXRhTGlua3NGcm9tVG1zKFxuICAgIHRtc0xpbms6IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uLFxuICAgIGtlZXBPcmlnaW5hbExpbmsgPSBmYWxzZVxuICApOiBQcm9taXNlPERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uW10+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBUbXNFbmRwb2ludCh0bXNMaW5rLnVybC50b1N0cmluZygpKVxuICAgIGNvbnN0IHRpbGVNYXBzID0gYXdhaXQgZW5kcG9pbnQuYWxsVGlsZU1hcHNcbiAgICBpZiAoIXRpbGVNYXBzPy5sZW5ndGgpIHJldHVybiBudWxsXG5cbiAgICAvLyBUT0RPOiBhdCBzb21lIHBvaW50IHVzZSB0aGUgaWRlbnRpZmllckluU2VydmljZSBmaWVsZCBpZiBtb3JlIHRoYXQgb25lIGxheWVycyBpbiB0aGUgVE1TIHNlcnZpY2VcbiAgICBjb25zdCB0aWxlTWFwSW5mbyA9IGF3YWl0IGVuZHBvaW50LmdldFRpbGVNYXBJbmZvKHRpbGVNYXBzWzBdLmhyZWYpXG5cbiAgICAvLyBjYXNlIDE6IG5vIHN0eWxlczsgcmV0dXJuIGEgcGxhaW4gVE1TIGxpbmtcbiAgICBpZiAoIXRpbGVNYXBJbmZvPy5tZXRhZGF0YT8ubGVuZ3RoKSByZXR1cm4gW3Rtc0xpbmtdXG5cbiAgICAvLyBjYXNlIDI6IHN0eWxlcyBwcmVzZW50OyByZXR1cm4gZWFjaCBhcyBhIHNlcGFyYXRlIGxpbmtcbiAgICBjb25zdCBzdHlsZUxpbmtzID0gdGlsZU1hcEluZm8ubWV0YWRhdGFcbiAgICAgIC5maWx0ZXIoKG1ldGEpID0+IG1ldGEuaHJlZilcbiAgICAgIC5tYXAoKG1ldGEpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBtZXRhLmhyZWYuc3BsaXQoJy8nKS5wb3AoKSB8fCAnJ1xuICAgICAgICBjb25zdCBsaW5rTmFtZSA9XG4gICAgICAgICAgdG1zTGluay5kZXNjcmlwdGlvbiB8fCAoJ25hbWUnIGluIHRtc0xpbmsgPyB0bXNMaW5rLm5hbWUgOiAnJylcbiAgICAgICAgY29uc3Qgc3R5bGVOYW1lID0gZmlsZU5hbWUuc3BsaXQoJy4nKVswXVxuICAgICAgICBjb25zdCBuYW1lID0gYCR7bGlua05hbWV9IC0gJHtzdHlsZU5hbWV9YFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICB1cmw6IG5ldyBVUkwobWV0YS5ocmVmKSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogJ21hcGxpYnJlLXN0eWxlJyxcbiAgICAgICAgfSBhcyBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvblxuICAgICAgfSlcbiAgICBpZiAoa2VlcE9yaWdpbmFsTGluaykge1xuICAgICAgc3R5bGVMaW5rcy51bnNoaWZ0KHRtc0xpbmspXG4gICAgfVxuICAgIHJldHVybiBzdHlsZUxpbmtzXG4gIH1cblxuICBnZXREb3dubG9hZExpbmtzRnJvbUVzcmlSZXN0KFxuICAgIGVzcmlSZXN0TGluazogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbiAgKTogRGF0YXNldE9ubGluZVJlc291cmNlW10ge1xuICAgIHJldHVybiBbJ2pzb24nLCAnZ2VvanNvbiddLm1hcCgoZm9ybWF0KSA9PiAoe1xuICAgICAgLi4uZXNyaVJlc3RMaW5rLFxuICAgICAgdXJsOiBuZXcgVVJMKFxuICAgICAgICB0aGlzLmdldERvd25sb2FkVXJsRnJvbUVzcmlSZXN0KGVzcmlSZXN0TGluay51cmwudG9TdHJpbmcoKSwgZm9ybWF0KVxuICAgICAgKSxcbiAgICAgIG1pbWVUeXBlOiBnZXRNaW1lVHlwZUZvckZvcm1hdChnZXRGaWxlRm9ybWF0RnJvbVNlcnZpY2VPdXRwdXQoZm9ybWF0KSksXG4gICAgfSkpXG4gIH1cblxuICByZWFkQXNHZW9Kc29uKFxuICAgIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgICBjYWNoZUFjdGl2ZTogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEZlYXR1cmVDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldChsaW5rLCBjYWNoZUFjdGl2ZSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGF0YXNldCkgPT4gZGF0YXNldC5zZWxlY3RBbGwoKS5yZWFkKCkpLFxuICAgICAgbWFwKChmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXMsXG4gICAgICB9KSlcbiAgICApXG4gIH1cblxuICBnZXREYXRhc2V0KFxuICAgIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgICBjYWNoZUFjdGl2ZTogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEJhc2VSZWFkZXI+IHtcbiAgICBpZiAobGluay50eXBlID09PSAnc2VydmljZScgJiYgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICd3ZnMnKSB7XG4gICAgICBjb25zdCB3ZnNVcmxFbmRwb2ludCA9IHRoaXMucHJveHkuZ2V0UHJveGllZFVybChsaW5rLnVybC50b1N0cmluZygpKVxuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG9wZW5EYXRhc2V0KFxuICAgICAgICAgIHdmc1VybEVuZHBvaW50LFxuICAgICAgICAgICd3ZnMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdmc0ZlYXR1cmVUeXBlOiBsaW5rLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYWNoZUFjdGl2ZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChsaW5rLnR5cGUgPT09ICdkb3dubG9hZCcpIHtcbiAgICAgIGNvbnN0IGxpbmtQcm94aWZpZWRVcmwgPSB0aGlzLnByb3h5LmdldFByb3hpZWRVcmwobGluay51cmwudG9TdHJpbmcoKSlcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGdldEZpbGVGb3JtYXQobGluaylcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFR5cGUgPVxuICAgICAgICBTdXBwb3J0ZWRUeXBlcy5pbmRleE9mKGZvcm1hdCBhcyBhbnkpID4gLTFcbiAgICAgICAgICA/IChmb3JtYXQgYXMgU3VwcG9ydGVkVHlwZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG9wZW5EYXRhc2V0KGxpbmtQcm94aWZpZWRVcmwsIHN1cHBvcnRlZFR5cGUsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpXG4gICAgICApLnBpcGUoKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdlc3JpUmVzdCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0RG93bmxvYWRVcmxGcm9tRXNyaVJlc3QoXG4gICAgICAgIGxpbmsudXJsLnRvU3RyaW5nKCksXG4gICAgICAgICdnZW9qc29uJ1xuICAgICAgKVxuICAgICAgcmV0dXJuIGZyb20ob3BlbkRhdGFzZXQodXJsLCAnZ2VvanNvbicsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpKS5waXBlKClcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnb2djRmVhdHVyZXMnXG4gICAgKSB7XG4gICAgICByZXR1cm4gZnJvbSh0aGlzLmdldERvd25sb2FkVXJsc0Zyb21PZ2NBcGkobGluay51cmwuaHJlZikpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGlvbkluZm8pID0+IHtcbiAgICAgICAgICBjb25zdCBnZW9qc29uVXJsID0gY29sbGVjdGlvbkluZm8uanNvbkRvd25sb2FkTGlua1xuICAgICAgICAgIHJldHVybiBvcGVuRGF0YXNldChnZW9qc29uVXJsLCAnZ2VvanNvbicsIHVuZGVmaW5lZCwgY2FjaGVBY3RpdmUpXG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVybCkgPT4ge1xuICAgICAgICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd2ZzLmdlb2pzb25nbWwubm90c3VwcG9ydGVkJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdwcm90b2NvbCBub3Qgc3VwcG9ydGVkJylcbiAgfVxufVxuIl19
|
|
@@ -1,18 +1,273 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, ElementRef, Input, QueryList, ViewChildren, ViewContainerRef, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { CheckToggleComponent } from '../../../../../../../libs/ui/inputs/src';
|
|
4
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
3
|
+
import { ButtonComponent, CheckToggleComponent } from '../../../../../../../libs/ui/inputs/src';
|
|
4
|
+
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
|
|
6
|
+
import { iconoirCheckCircle, iconoirCircle, iconoirSettings, } from '@ng-icons/iconoir';
|
|
7
|
+
import { matMoreHorizOutline } from '@ng-icons/material-icons/outline';
|
|
8
|
+
import { EditorFacade } from '../../+state/editor.facade';
|
|
9
|
+
import { ConfirmationDialogComponent } from '../../../../../../../libs/ui/elements/src';
|
|
10
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
11
|
+
import { RecordsRepositoryInterface } from '../../../../../../../libs/common/domain/src/lib/repository/records-repository.interface';
|
|
12
|
+
import { map, Subscription } from 'rxjs';
|
|
13
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
14
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
15
|
+
import { ActionMenuComponent } from '../../../../../../../libs/ui/search/src';
|
|
5
16
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "
|
|
17
|
+
import * as i1 from "../../+state/editor.facade";
|
|
18
|
+
import * as i2 from "@angular/material/dialog";
|
|
19
|
+
import * as i3 from "@ngx-translate/core";
|
|
20
|
+
import * as i4 from "../../../../../../../libs/common/domain/src/lib/repository/records-repository.interface";
|
|
21
|
+
import * as i5 from "@angular/cdk/overlay";
|
|
22
|
+
import * as i6 from "@angular/common";
|
|
23
|
+
const extraFlagMap = {
|
|
24
|
+
ar: 'arab',
|
|
25
|
+
en: 'gb',
|
|
26
|
+
ko: 'kr',
|
|
27
|
+
cs: 'cz',
|
|
28
|
+
zh: 'cn',
|
|
29
|
+
ca: 'es-ct',
|
|
30
|
+
rm: 'ch',
|
|
31
|
+
da: 'dk',
|
|
32
|
+
sv: 'se',
|
|
33
|
+
cy: 'gb-wls',
|
|
34
|
+
hy: 'am',
|
|
35
|
+
ka: 'ge',
|
|
36
|
+
uk: 'ua',
|
|
37
|
+
};
|
|
7
38
|
export class MultilingualPanelComponent {
|
|
8
|
-
|
|
9
|
-
this.
|
|
39
|
+
set record(value) {
|
|
40
|
+
this._record = value;
|
|
41
|
+
this.isMultilingual = value.otherLanguages.length > 0;
|
|
42
|
+
this.editTranslations = false;
|
|
43
|
+
this.recordLanguages = [...value.otherLanguages, value.defaultLanguage];
|
|
44
|
+
this.selectedLanguages = this.recordLanguages;
|
|
45
|
+
this.formLanguage = value.defaultLanguage;
|
|
10
46
|
}
|
|
11
|
-
|
|
12
|
-
|
|
47
|
+
constructor(facade, dialog, translateService, recordsRepository, overlay, viewContainerRef, cdr) {
|
|
48
|
+
this.facade = facade;
|
|
49
|
+
this.dialog = dialog;
|
|
50
|
+
this.translateService = translateService;
|
|
51
|
+
this.recordsRepository = recordsRepository;
|
|
52
|
+
this.overlay = overlay;
|
|
53
|
+
this.viewContainerRef = viewContainerRef;
|
|
54
|
+
this.cdr = cdr;
|
|
55
|
+
this.selectedLanguages = [];
|
|
56
|
+
this.recordLanguages = [];
|
|
57
|
+
this.formLanguage = '';
|
|
58
|
+
this.isActionMenuOpen = false;
|
|
59
|
+
this.subscription = new Subscription();
|
|
60
|
+
this.supportedLanguages$ = this.recordsRepository
|
|
61
|
+
.getApplicationLanguages()
|
|
62
|
+
.pipe(map((languages) => this.sortLanguages(languages)));
|
|
63
|
+
}
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
this.subscription.unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
sortLanguages(languages) {
|
|
68
|
+
return languages
|
|
69
|
+
.map((lang) => {
|
|
70
|
+
const label = this.translateService.instant('language.' + lang);
|
|
71
|
+
const isTranslated = label !== 'language.' + lang;
|
|
72
|
+
return {
|
|
73
|
+
lang,
|
|
74
|
+
label,
|
|
75
|
+
isTranslated,
|
|
76
|
+
};
|
|
77
|
+
})
|
|
78
|
+
.sort((a, b) => {
|
|
79
|
+
if (a.isTranslated && !b.isTranslated)
|
|
80
|
+
return -1;
|
|
81
|
+
if (!a.isTranslated && b.isTranslated)
|
|
82
|
+
return 1;
|
|
83
|
+
return a.label.localeCompare(b.label);
|
|
84
|
+
})
|
|
85
|
+
.map((item) => item.lang);
|
|
86
|
+
}
|
|
87
|
+
toggleLanguageSelection() {
|
|
88
|
+
this.editTranslations = !this.editTranslations;
|
|
89
|
+
}
|
|
90
|
+
getIconClass(lang) {
|
|
91
|
+
return extraFlagMap[lang]
|
|
92
|
+
? `fi fi-${extraFlagMap[lang]} w-4 h-3`
|
|
93
|
+
: `fi fi-${lang} w-4 h-3`;
|
|
94
|
+
}
|
|
95
|
+
switchMultilingual() {
|
|
96
|
+
if (this.isMultilingual && this.selectedLanguages.length > 1) {
|
|
97
|
+
this.confirmDeleteAction();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.isMultilingual = true;
|
|
101
|
+
this.editTranslations = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
getExtraClass(lang) {
|
|
105
|
+
const baseClass = 'h-[34px] w-full font-bold justify-start hover:bg-white';
|
|
106
|
+
if (this.selectedLanguages.includes(lang)) {
|
|
107
|
+
return `${baseClass} bg-white border border-black`;
|
|
108
|
+
}
|
|
109
|
+
return baseClass;
|
|
110
|
+
}
|
|
111
|
+
toggleLanguage(lang) {
|
|
112
|
+
if (this.selectedLanguages.includes(lang)) {
|
|
113
|
+
this.removeSelectedLanguage(lang);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.selectedLanguages.push(lang);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
removeSelectedLanguage(lang) {
|
|
120
|
+
this.selectedLanguages = this.selectedLanguages.filter((language) => language !== lang);
|
|
121
|
+
}
|
|
122
|
+
validateTranslations() {
|
|
123
|
+
const equalLength = this.selectedLanguages.length === this.recordLanguages.length;
|
|
124
|
+
if (this.selectedLanguages.length < this.recordLanguages.length ||
|
|
125
|
+
(equalLength && this.selectedLanguages !== this.recordLanguages)) {
|
|
126
|
+
this.confirmDeleteAction(this.selectedLanguages);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.updateTranslations();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
updateTranslations() {
|
|
133
|
+
this.facade.updateRecordField('otherLanguages', this.selectedLanguages.filter((lang) => lang !== this.formLanguage));
|
|
134
|
+
this.recordLanguages = this.selectedLanguages;
|
|
135
|
+
this.editTranslations = false;
|
|
136
|
+
}
|
|
137
|
+
switchFormLang(lang) {
|
|
138
|
+
// TO IMPLEMENT FURTHER
|
|
139
|
+
}
|
|
140
|
+
switchDefaultLang(lang) {
|
|
141
|
+
this.formLanguage = lang;
|
|
142
|
+
this.facade.updateRecordField('defaultLanguage', lang);
|
|
143
|
+
this.facade.updateRecordField('otherLanguages', this.selectedLanguages.filter((lang) => lang !== this.formLanguage));
|
|
144
|
+
this.closeActionMenu();
|
|
145
|
+
}
|
|
146
|
+
confirmDeleteAction(lang) {
|
|
147
|
+
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
148
|
+
data: {
|
|
149
|
+
title: this.translateService.instant('editor.record.multilingual.confirmation.title'),
|
|
150
|
+
message: this.translateService.instant('editor.record.multilingual.confirmation.message'),
|
|
151
|
+
confirmText: this.translateService.instant('editor.record.multilingual.confirmation.confirmText'),
|
|
152
|
+
cancelText: this.translateService.instant('editor.record.multilingual.confirmation.cancelText'),
|
|
153
|
+
},
|
|
154
|
+
restoreFocus: true,
|
|
155
|
+
});
|
|
156
|
+
this.subscription.add(dialogRef.afterClosed().subscribe((confirmed) => {
|
|
157
|
+
if (confirmed) {
|
|
158
|
+
if (lang) {
|
|
159
|
+
if (!Array.isArray(lang)) {
|
|
160
|
+
this.removeSelectedLanguage(lang);
|
|
161
|
+
this.closeActionMenu();
|
|
162
|
+
}
|
|
163
|
+
this.updateTranslations();
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.facade.updateRecordField('otherLanguages', []);
|
|
167
|
+
this.isMultilingual = false;
|
|
168
|
+
this.selectedLanguages = [];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
this.isMultilingual = true;
|
|
173
|
+
this.selectedLanguages = this.recordLanguages;
|
|
174
|
+
}
|
|
175
|
+
this.editTranslations = false;
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
isFirstUnsupported(index) {
|
|
179
|
+
const langs = this.sortLanguages(this.recordLanguages);
|
|
180
|
+
return (langs[index].length === 3 &&
|
|
181
|
+
langs.slice(0, index).every((lang) => lang.length !== 3));
|
|
182
|
+
}
|
|
183
|
+
isLangSupported(lang) {
|
|
184
|
+
return lang.length === 2;
|
|
185
|
+
}
|
|
186
|
+
getToggleTitle(lang) {
|
|
187
|
+
if (lang === this._record.defaultLanguage) {
|
|
188
|
+
return this.translateService.instant('editor.record.form.multilingual.forbidden');
|
|
189
|
+
}
|
|
190
|
+
return '';
|
|
191
|
+
}
|
|
192
|
+
openActionMenu(item, template) {
|
|
193
|
+
this.isActionMenuOpen = true;
|
|
194
|
+
const index = this.sortLanguages(this.selectedLanguages).indexOf(item);
|
|
195
|
+
const buttonElement = this.actionMenuButtons.toArray()[index];
|
|
196
|
+
const positionStrategy = this.overlay
|
|
197
|
+
.position()
|
|
198
|
+
.flexibleConnectedTo(buttonElement)
|
|
199
|
+
.withFlexibleDimensions(true)
|
|
200
|
+
.withPush(true)
|
|
201
|
+
.withPositions([
|
|
202
|
+
{
|
|
203
|
+
originX: 'end',
|
|
204
|
+
originY: 'bottom',
|
|
205
|
+
overlayX: 'end',
|
|
206
|
+
overlayY: 'top',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
originX: 'end',
|
|
210
|
+
originY: 'top',
|
|
211
|
+
overlayX: 'end',
|
|
212
|
+
overlayY: 'bottom',
|
|
213
|
+
},
|
|
214
|
+
]);
|
|
215
|
+
this.overlayRef = this.overlay.create({
|
|
216
|
+
hasBackdrop: true,
|
|
217
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
218
|
+
positionStrategy: positionStrategy,
|
|
219
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
220
|
+
});
|
|
221
|
+
const portal = new TemplatePortal(template, this.viewContainerRef);
|
|
222
|
+
this.overlayRef.attach(portal);
|
|
223
|
+
this.subscription.add(this.overlayRef.backdropClick().subscribe(() => {
|
|
224
|
+
this.closeActionMenu();
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
227
|
+
closeActionMenu() {
|
|
228
|
+
if (this.overlayRef) {
|
|
229
|
+
this.isActionMenuOpen = false;
|
|
230
|
+
this.overlayRef.dispose();
|
|
231
|
+
this.cdr.markForCheck();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultilingualPanelComponent, deps: [{ token: i1.EditorFacade }, { token: i2.MatDialog }, { token: i3.TranslateService }, { token: i4.RecordsRepositoryInterface }, { token: i5.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultilingualPanelComponent, isStandalone: true, selector: "gn-ui-multilingual-panel", inputs: { record: "record" }, providers: [
|
|
236
|
+
provideIcons({
|
|
237
|
+
iconoirSettings,
|
|
238
|
+
matMoreHorizOutline,
|
|
239
|
+
iconoirCheckCircle,
|
|
240
|
+
iconoirCircle,
|
|
241
|
+
}),
|
|
242
|
+
provideNgIconsConfig({
|
|
243
|
+
size: '1.25em',
|
|
244
|
+
}),
|
|
245
|
+
], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "directive", type: i3.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: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete", "page"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback", "switch"] }] }); }
|
|
13
246
|
}
|
|
14
247
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultilingualPanelComponent, decorators: [{
|
|
15
248
|
type: Component,
|
|
16
|
-
args: [{ selector: 'gn-ui-multilingual-panel', standalone: true, imports: [
|
|
17
|
-
|
|
18
|
-
|
|
249
|
+
args: [{ selector: 'gn-ui-multilingual-panel', standalone: true, imports: [
|
|
250
|
+
CommonModule,
|
|
251
|
+
CheckToggleComponent,
|
|
252
|
+
TranslateModule,
|
|
253
|
+
ButtonComponent,
|
|
254
|
+
NgIconComponent,
|
|
255
|
+
ActionMenuComponent,
|
|
256
|
+
], providers: [
|
|
257
|
+
provideIcons({
|
|
258
|
+
iconoirSettings,
|
|
259
|
+
matMoreHorizOutline,
|
|
260
|
+
iconoirCheckCircle,
|
|
261
|
+
iconoirCircle,
|
|
262
|
+
}),
|
|
263
|
+
provideNgIconsConfig({
|
|
264
|
+
size: '1.25em',
|
|
265
|
+
}),
|
|
266
|
+
], template: "<div\n class=\"flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n" }]
|
|
267
|
+
}], ctorParameters: () => [{ type: i1.EditorFacade }, { type: i2.MatDialog }, { type: i3.TranslateService }, { type: i4.RecordsRepositoryInterface }, { type: i5.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { record: [{
|
|
268
|
+
type: Input
|
|
269
|
+
}], actionMenuButtons: [{
|
|
270
|
+
type: ViewChildren,
|
|
271
|
+
args: ['actionMenuButton', { read: ElementRef }]
|
|
272
|
+
}] } });
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsaW5ndWFsLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL211bHRpbGluZ3VhbC1wYW5lbC9tdWx0aWxpbmd1YWwtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGlsaW5ndWFsLXBhbmVsL211bHRpbGluZ3VhbC1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXZFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFDdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFN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LFFBQVE7YUFDZixDQUFDO1NBQ0gsK0dBbUJ5QyxVQUFVLDZCQzFGdEQsaTZJQXdIQSx5RERsRUksWUFBWSxtWkFDWixvQkFBb0Isa0lBQ3BCLGVBQWUsbU9BQ2YsZUFBZSwrSEFDZixlQUFlLDZHQUNmLG1CQUFtQjs7NEZBZ0JWLDBCQUEwQjtrQkF6QnRDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsbUJBQW1CO3FCQUNwQixhQUNVO3dCQUNULFlBQVksQ0FBQzs0QkFDWCxlQUFlOzRCQUNmLG1CQUFtQjs0QkFDbkIsa0JBQWtCOzRCQUNsQixhQUFhO3lCQUNkLENBQUM7d0JBQ0Ysb0JBQW9CLENBQUM7NEJBQ25CLElBQUksRUFBRSxRQUFRO3lCQUNmLENBQUM7cUJBQ0g7c1FBV1ksTUFBTTtzQkFBbEIsS0FBSztnQkFTTixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQsIENoZWNrVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IENhdGFsb2dSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBOZ0ljb25Db21wb25lbnQsXG4gIHByb3ZpZGVJY29ucyxcbiAgcHJvdmlkZU5nSWNvbnNDb25maWcsXG59IGZyb20gJ0BuZy1pY29ucy9jb3JlJ1xuaW1wb3J0IHtcbiAgaWNvbm9pckNoZWNrQ2lyY2xlLFxuICBpY29ub2lyQ2lyY2xlLFxuICBpY29ub2lyU2V0dGluZ3MsXG59IGZyb20gJ0BuZy1pY29ucy9pY29ub2lyJ1xuaW1wb3J0IHsgbWF0TW9yZUhvcml6T3V0bGluZSB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9vdXRsaW5lJ1xuaW1wb3J0IHsgRWRpdG9yRmFjYWRlIH0gZnJvbSAnLi4vLi4vK3N0YXRlL2VkaXRvci5mYWNhZGUnXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYydcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZydcbmltcG9ydCB7IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcmVwb3NpdG9yeS9yZWNvcmRzLXJlcG9zaXRvcnkuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgbWFwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5J1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJ1xuaW1wb3J0IHsgQWN0aW9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc2VhcmNoL3NyYydcblxuY29uc3QgZXh0cmFGbGFnTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICBhcjogJ2FyYWInLFxuICBlbjogJ2diJyxcbiAga286ICdrcicsXG4gIGNzOiAnY3onLFxuICB6aDogJ2NuJyxcbiAgY2E6ICdlcy1jdCcsXG4gIHJtOiAnY2gnLFxuICBkYTogJ2RrJyxcbiAgc3Y6ICdzZScsXG4gIGN5OiAnZ2Itd2xzJyxcbiAgaHk6ICdhbScsXG4gIGthOiAnZ2UnLFxuICB1azogJ3VhJyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktbXVsdGlsaW5ndWFsLXBhbmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDaGVja1RvZ2dsZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIE5nSWNvbkNvbXBvbmVudCxcbiAgICBBY3Rpb25NZW51Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSWNvbnMoe1xuICAgICAgaWNvbm9pclNldHRpbmdzLFxuICAgICAgbWF0TW9yZUhvcml6T3V0bGluZSxcbiAgICAgIGljb25vaXJDaGVja0NpcmNsZSxcbiAgICAgIGljb25vaXJDaXJjbGUsXG4gICAgfSksXG4gICAgcHJvdmlkZU5nSWNvbnNDb25maWcoe1xuICAgICAgc2l6ZTogJzEuMjVlbScsXG4gICAgfSksXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aWxpbmd1YWwtcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbXVsdGlsaW5ndWFsLXBhbmVsLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aWxpbmd1YWxQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGlzTXVsdGlsaW5ndWFsOiBib29sZWFuXG4gIF9yZWNvcmQ6IENhdGFsb2dSZWNvcmRcbiAgZWRpdFRyYW5zbGF0aW9uczogYm9vbGVhblxuICBzZWxlY3RlZExhbmd1YWdlcyA9IFtdXG4gIHJlY29yZExhbmd1YWdlcyA9IFtdXG4gIGZvcm1MYW5ndWFnZSA9ICcnXG4gIEBJbnB1dCgpIHNldCByZWNvcmQodmFsdWU6IENhdGFsb2dSZWNvcmQpIHtcbiAgICB0aGlzLl9yZWNvcmQgPSB2YWx1ZVxuICAgIHRoaXMuaXNNdWx0aWxpbmd1YWwgPSB2YWx1ZS5vdGhlckxhbmd1YWdlcy5sZW5ndGggPiAwXG4gICAgdGhpcy5lZGl0VHJhbnNsYXRpb25zID0gZmFsc2VcbiAgICB0aGlzLnJlY29yZExhbmd1YWdlcyA9IFsuLi52YWx1ZS5vdGhlckxhbmd1YWdlcywgdmFsdWUuZGVmYXVsdExhbmd1YWdlXVxuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMgPSB0aGlzLnJlY29yZExhbmd1YWdlc1xuICAgIHRoaXMuZm9ybUxhbmd1YWdlID0gdmFsdWUuZGVmYXVsdExhbmd1YWdlXG4gIH1cbiAgQFZpZXdDaGlsZHJlbignYWN0aW9uTWVudUJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBhY3Rpb25NZW51QnV0dG9ucyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPlxuICBwcml2YXRlIG92ZXJsYXlSZWYhOiBPdmVybGF5UmVmXG5cbiAgaXNBY3Rpb25NZW51T3BlbiA9IGZhbHNlXG4gIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKVxuXG4gIHN1cHBvcnRlZExhbmd1YWdlcyQgPSB0aGlzLnJlY29yZHNSZXBvc2l0b3J5XG4gICAgLmdldEFwcGxpY2F0aW9uTGFuZ3VhZ2VzKClcbiAgICAucGlwZShtYXAoKGxhbmd1YWdlcykgPT4gdGhpcy5zb3J0TGFuZ3VhZ2VzKGxhbmd1YWdlcykpKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBmYWNhZGU6IEVkaXRvckZhY2FkZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjb3Jkc1JlcG9zaXRvcnk6IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cblxuICBzb3J0TGFuZ3VhZ2VzKGxhbmd1YWdlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbGFuZ3VhZ2VzXG4gICAgICAubWFwKChsYW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xhbmd1YWdlLicgKyBsYW5nKVxuICAgICAgICBjb25zdCBpc1RyYW5zbGF0ZWQgPSBsYWJlbCAhPT0gJ2xhbmd1YWdlLicgKyBsYW5nXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIGlzVHJhbnNsYXRlZCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLmlzVHJhbnNsYXRlZCAmJiAhYi5pc1RyYW5zbGF0ZWQpIHJldHVybiAtMVxuICAgICAgICBpZiAoIWEuaXNUcmFuc2xhdGVkICYmIGIuaXNUcmFuc2xhdGVkKSByZXR1cm4gMVxuXG4gICAgICAgIHJldHVybiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbClcbiAgICAgIH0pXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmxhbmcpXG4gIH1cblxuICB0b2dnbGVMYW5ndWFnZVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmVkaXRUcmFuc2xhdGlvbnMgPSAhdGhpcy5lZGl0VHJhbnNsYXRpb25zXG4gIH1cblxuICBnZXRJY29uQ2xhc3MobGFuZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGV4dHJhRmxhZ01hcFtsYW5nXVxuICAgICAgPyBgZmkgZmktJHtleHRyYUZsYWdNYXBbbGFuZ119IHctNCBoLTNgXG4gICAgICA6IGBmaSBmaS0ke2xhbmd9IHctNCBoLTNgXG4gIH1cblxuICBzd2l0Y2hNdWx0aWxpbmd1YWwoKSB7XG4gICAgaWYgKHRoaXMuaXNNdWx0aWxpbmd1YWwgJiYgdGhpcy5zZWxlY3RlZExhbmd1YWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmNvbmZpcm1EZWxldGVBY3Rpb24oKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTXVsdGlsaW5ndWFsID0gdHJ1ZVxuICAgICAgdGhpcy5lZGl0VHJhbnNsYXRpb25zID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGdldEV4dHJhQ2xhc3MobGFuZzogc3RyaW5nKSB7XG4gICAgY29uc3QgYmFzZUNsYXNzID0gJ2gtWzM0cHhdIHctZnVsbCBmb250LWJvbGQganVzdGlmeS1zdGFydCBob3ZlcjpiZy13aGl0ZSdcbiAgICBpZiAodGhpcy5zZWxlY3RlZExhbmd1YWdlcy5pbmNsdWRlcyhsYW5nKSkge1xuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ibGFja2BcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VDbGFzc1xuICB9XG5cbiAgdG9nZ2xlTGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMuaW5jbHVkZXMobGFuZykpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRMYW5ndWFnZShsYW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzLnB1c2gobGFuZylcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzLmZpbHRlcihcbiAgICAgIChsYW5ndWFnZSkgPT4gbGFuZ3VhZ2UgIT09IGxhbmdcbiAgICApXG4gIH1cblxuICB2YWxpZGF0ZVRyYW5zbGF0aW9ucygpIHtcbiAgICBjb25zdCBlcXVhbExlbmd0aCA9XG4gICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gdGhpcy5yZWNvcmRMYW5ndWFnZXMubGVuZ3RoXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlcy5sZW5ndGggPCB0aGlzLnJlY29yZExhbmd1YWdlcy5sZW5ndGggfHxcbiAgICAgIChlcXVhbExlbmd0aCAmJiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzICE9PSB0aGlzLnJlY29yZExhbmd1YWdlcylcbiAgICApIHtcbiAgICAgIHRoaXMuY29uZmlybURlbGV0ZUFjdGlvbih0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYW5zbGF0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVHJhbnNsYXRpb25zKCkge1xuICAgIHRoaXMuZmFjYWRlLnVwZGF0ZVJlY29yZEZpZWxkKFxuICAgICAgJ290aGVyTGFuZ3VhZ2VzJyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMuZmlsdGVyKChsYW5nKSA9PiBsYW5nICE9PSB0aGlzLmZvcm1MYW5ndWFnZSlcbiAgICApXG4gICAgdGhpcy5yZWNvcmRMYW5ndWFnZXMgPSB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VzXG4gICAgdGhpcy5lZGl0VHJhbnNsYXRpb25zID0gZmFsc2VcbiAgfVxuXG4gIHN3aXRjaEZvcm1MYW5nKGxhbmcpIHtcbiAgICAvLyBUTyBJTVBMRU1FTlQgRlVSVEhFUlxuICB9XG5cbiAgc3dpdGNoRGVmYXVsdExhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtTGFuZ3VhZ2UgPSBsYW5nXG4gICAgdGhpcy5mYWNhZGUudXBkYXRlUmVjb3JkRmllbGQoJ2RlZmF1bHRMYW5ndWFnZScsIGxhbmcpXG4gICAgdGhpcy5mYWNhZGUudXBkYXRlUmVjb3JkRmllbGQoXG4gICAgICAnb3RoZXJMYW5ndWFnZXMnLFxuICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlcy5maWx0ZXIoKGxhbmcpID0+IGxhbmcgIT09IHRoaXMuZm9ybUxhbmd1YWdlKVxuICAgIClcbiAgICB0aGlzLmNsb3NlQWN0aW9uTWVudSgpXG4gIH1cblxuICBjb25maXJtRGVsZXRlQWN0aW9uKGxhbmc/OiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAnZWRpdG9yLnJlY29yZC5tdWx0aWxpbmd1YWwuY29uZmlybWF0aW9uLnRpdGxlJ1xuICAgICAgICApLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAnZWRpdG9yLnJlY29yZC5tdWx0aWxpbmd1YWwuY29uZmlybWF0aW9uLm1lc3NhZ2UnXG4gICAgICAgICksXG4gICAgICAgIGNvbmZpcm1UZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAnZWRpdG9yLnJlY29yZC5tdWx0aWxpbmd1YWwuY29uZmlybWF0aW9uLmNvbmZpcm1UZXh0J1xuICAgICAgICApLFxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAnZWRpdG9yLnJlY29yZC5tdWx0aWxpbmd1YWwuY29uZmlybWF0aW9uLmNhbmNlbFRleHQnXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgIH0pXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChjb25maXJtZWQpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICAgIGlmIChsYW5nKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGFuZykpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZExhbmd1YWdlKGxhbmcpXG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VBY3Rpb25NZW51KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNsYXRpb25zKClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYWNhZGUudXBkYXRlUmVjb3JkRmllbGQoJ290aGVyTGFuZ3VhZ2VzJywgW10pXG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlsaW5ndWFsID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMgPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzTXVsdGlsaW5ndWFsID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZXMgPSB0aGlzLnJlY29yZExhbmd1YWdlc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdFRyYW5zbGF0aW9ucyA9IGZhbHNlXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGlzRmlyc3RVbnN1cHBvcnRlZChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGFuZ3MgPSB0aGlzLnNvcnRMYW5ndWFnZXModGhpcy5yZWNvcmRMYW5ndWFnZXMpXG4gICAgcmV0dXJuIChcbiAgICAgIGxhbmdzW2luZGV4XS5sZW5ndGggPT09IDMgJiZcbiAgICAgIGxhbmdzLnNsaWNlKDAsIGluZGV4KS5ldmVyeSgobGFuZykgPT4gbGFuZy5sZW5ndGggIT09IDMpXG4gICAgKVxuICB9XG5cbiAgaXNMYW5nU3VwcG9ydGVkKGxhbmc6IHN0cmluZykge1xuICAgIHJldHVybiBsYW5nLmxlbmd0aCA9PT0gMlxuICB9XG5cbiAgZ2V0VG9nZ2xlVGl0bGUobGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKGxhbmcgPT09IHRoaXMuX3JlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ2VkaXRvci5yZWNvcmQuZm9ybS5tdWx0aWxpbmd1YWwuZm9yYmlkZGVuJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIG9wZW5BY3Rpb25NZW51KGl0ZW06IHN0cmluZywgdGVtcGxhdGUpIHtcbiAgICB0aGlzLmlzQWN0aW9uTWVudU9wZW4gPSB0cnVlXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNvcnRMYW5ndWFnZXModGhpcy5zZWxlY3RlZExhbmd1YWdlcykuaW5kZXhPZihpdGVtKVxuICAgIGNvbnN0IGJ1dHRvbkVsZW1lbnQgPSB0aGlzLmFjdGlvbk1lbnVCdXR0b25zLnRvQXJyYXkoKVtpbmRleF1cblxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhidXR0b25FbGVtZW50KVxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnModHJ1ZSlcbiAgICAgIC53aXRoUHVzaCh0cnVlKVxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICBdKVxuXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICB9KVxuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpXG5cbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VBY3Rpb25NZW51KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgY2xvc2VBY3Rpb25NZW51KCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuaXNBY3Rpb25NZW51T3BlbiA9IGZhbHNlXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctWzMwMnB4XSBiZy1uZXV0cmFsLTEwMCBib3JkZXItbCBib3JkZXItZ3JheS0zMDAgcHktOCBweC0zIGdhcC02IG92ZXJmbG93LWF1dG9cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBweC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC0zeGwgZm9udC10aXRsZSB0ZXh0LWJsYWNrLzgwXCIgdHJhbnNsYXRlXG4gICAgICA+ZWRpdG9yLnJlY29yZC5mb3JtLm11bHRpbGluZ3VhbC50aXRsZTwvc3BhblxuICAgID5cbiAgICA8YnV0dG9uXG4gICAgICBbdGl0bGVdPVwiJ2VkaXRvci5yZWNvcmQuZm9ybS5tdWx0aWxpbmd1YWwub3BlbicgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxhbmd1YWdlU2VsZWN0aW9uKClcIlxuICAgICAgKm5nSWY9XCJpc011bHRpbGluZ3VhbFwiXG4gICAgICBkYXRhLXRlc3Q9XCJhY3RpdmF0ZVNlbGVjdGlvblwiXG4gICAgPlxuICAgICAgPG5nLWljb24gY2xhc3M9XCJtdC0xXCIgbmFtZT1cImljb25vaXJTZXR0aW5nc1wiPjwvbmctaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCIgKm5nSWY9XCJlZGl0VHJhbnNsYXRpb25zIHx8ICFpc011bHRpbGluZ3VhbFwiPlxuICAgIDxnbi11aS1jaGVjay10b2dnbGVcbiAgICAgIGNsYXNzPVwicC0yXCJcbiAgICAgIFtsYWJlbF09XCInZWRpdG9yLnJlY29yZC5mb3JtLm11bHRpbGluZ3VhbC5lbmFibGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgWyh2YWx1ZSldPVwiaXNNdWx0aWxpbmd1YWxcIlxuICAgICAgKHRvZ2dsZWQpPVwic3dpdGNoTXVsdGlsaW5ndWFsKCRldmVudClcIlxuICAgID48L2duLXVpLWNoZWNrLXRvZ2dsZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNNdWx0aWxpbmd1YWxcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBib3JkZXItdCBib3JkZXItZ3JheS0zMDAgcC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIiB0cmFuc2xhdGVcbiAgICAgICAgICA+ZWRpdG9yLnJlY29yZC5mb3JtLm11bHRpbGluZ3VhbC5hY3RpdmF0ZTwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgICBleHRyYUNsYXNzPVwidy0xNiBoLTggZm9udC1ib2xkXCJcbiAgICAgICAgICB0eXBlPVwiZ3JheVwiXG4gICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cInZhbGlkYXRlVHJhbnNsYXRpb25zKClcIlxuICAgICAgICAgIGRhdGEtdGVzdD1cInZhbGlkYXRlU2VsZWN0aW9uXCJcbiAgICAgICAgICA+e3sgJ2VkaXRvci5yZWNvcmQuZm9ybS5tdWx0aWxpbmd1YWwudmFsaWRhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VwcG9ydGVkTGFuZ3VhZ2VzJCB8IGFzeW5jIGFzIGxhbmd1YWdlc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIHctZnVsbCBweC0yXCJcbiAgICAgICAgICBkYXRhLXRlc3Q9XCJsYW5nQXZhaWxhYmxlXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZyBvZiBsYW5ndWFnZXNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgW2V4dHJhQ2xhc3NdPVwiZ2V0RXh0cmFDbGFzcyhsYW5nKVwiXG4gICAgICAgICAgICB0eXBlPVwiZ3JheVwiXG4gICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwidG9nZ2xlTGFuZ3VhZ2UobGFuZylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxhbmcgPT09IF9yZWNvcmQuZGVmYXVsdExhbmd1YWdlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJnZXRUb2dnbGVUaXRsZShsYW5nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdldEljb25DbGFzcyhsYW5nKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7ICdsYW5ndWFnZS4nICsgbGFuZyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2duLXVpLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhZWRpdFRyYW5zbGF0aW9ucyAmJiBpc011bHRpbGluZ3VhbFwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgIDxnbi11aS1idXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCByZWNvcmRMYW5nIG9mIHNvcnRMYW5ndWFnZXMocmVjb3JkTGFuZ3VhZ2VzKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBleHRyYUNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gYmctd2hpdGUgYm9yZGVyIGJvcmRlci13aGl0ZSByb3VuZGVkIG1iLTEgaC1bMzRweF0gdy1mdWxsXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ210LTgnOiBpc0ZpcnN0VW5zdXBwb3J0ZWQoaSksXG4gICAgICAgICcnOiB0cnVlLFxuICAgICAgfVwiXG4gICAgICAoYnV0dG9uQ2xpY2spPVwic3dpdGNoRm9ybUxhbmcocmVjb3JkTGFuZylcIlxuICAgICAgdHlwZT1cIm91dGxpbmVcIlxuICAgICAgZGF0YS10ZXN0PVwibGFuZ1N3aXRjaFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJyZWNvcmRMYW5nID09PSBmb3JtTGFuZ3VhZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IG10LTFcIlxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyQ2hlY2tDaXJjbGVcIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgICpuZ0lmPVwicmVjb3JkTGFuZyAhPT0gZm9ybUxhbmd1YWdlXCJcbiAgICAgICAgICBjbGFzcz1cInRleHQtZ3JheS04MDAgbXQtMVwiXG4gICAgICAgICAgbmFtZT1cImljb25vaXJDaXJjbGVcIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwicmVjb3JkTGFuZy5sZW5ndGggPT09IDJcIlxuICAgICAgICAgIFtjbGFzc109XCJnZXRJY29uQ2xhc3MocmVjb3JkTGFuZykgKyAnbXQtMSdcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJyZWNvcmRMYW5nID09PSBmb3JtTGFuZ3VhZ2UgPyAndGV4dC1ibGFjaycgOiAnJ1wiPnt7XG4gICAgICAgICAgaXNMYW5nU3VwcG9ydGVkKHJlY29yZExhbmcpXG4gICAgICAgICAgICA/ICgnbGFuZ3VhZ2UuJyArIHJlY29yZExhbmcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICA6IHJlY29yZExhbmcudG9VcHBlckNhc2UoKVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJyZWNvcmRMYW5nID09PSBmb3JtTGFuZ3VhZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LWJhc2VcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5lZGl0b3IucmVjb3JkLmZvcm0ubXVsdGlsaW5ndWFsLmRlZmF1bHQ8L3NwYW5cbiAgICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgb3BlbkFjdGlvbk1lbnUocmVjb3JkTGFuZywgdGVtcGxhdGUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICAgICAjYWN0aW9uTWVudUJ1dHRvblxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWljb24gY2xhc3M9XCJwYi01XCIgbmFtZT1cIm1hdE1vcmVIb3Jpek91dGxpbmVcIj48L25nLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgICAgICAgIDxnbi11aS1hY3Rpb24tbWVudVxuICAgICAgICAgICAgW2NhbkRlbGV0ZV09XCJyZWNvcmRMYW5nICE9PSBfcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVwiXG4gICAgICAgICAgICBwYWdlPVwicmVjb3JkXCJcbiAgICAgICAgICAgIChkZWxldGUpPVwiY29uZmlybURlbGV0ZUFjdGlvbihyZWNvcmRMYW5nKVwiXG4gICAgICAgICAgICAoY2xvc2VBY3Rpb25NZW51KT1cImNsb3NlQWN0aW9uTWVudSgpXCJcbiAgICAgICAgICAgIChzd2l0Y2gpPVwic3dpdGNoRGVmYXVsdExhbmcocmVjb3JkTGFuZylcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2duLXVpLWFjdGlvbi1tZW51PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9nbi11aS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -5,8 +5,7 @@ export * from './lib/data-view/data-view.component';
|
|
|
5
5
|
export * from './lib/data-view-share/data-view-share.component';
|
|
6
6
|
export * from './lib/data-view-web-component/data-view-web-component.component';
|
|
7
7
|
export * from './lib/external-viewer-button/external-viewer-button.component';
|
|
8
|
-
export * from './lib/map-view/map-view.component';
|
|
9
8
|
export * from './lib/gpf-api-dl/gpf-api-dl.component';
|
|
9
|
+
export * from './lib/map-view/map-view.component';
|
|
10
10
|
export * from './lib/record-meta/record-meta.component';
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvcmVjb3JkL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMseURBQXlELENBQUE7QUFDdkUsY0FBYyxxQ0FBcUMsQ0FBQTtBQUNuRCxjQUFjLGlEQUFpRCxDQUFBO0FBQy9ELGNBQWMsaUVBQWlFLENBQUE7QUFDL0UsY0FBYywrREFBK0QsQ0FBQTtBQUM3RSxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsdUNBQXVDLENBQUE7QUFDckQsY0FBYyx5Q0FBeUMsQ0FBQTtBQUN2RCxjQUFjLCtEQUErRCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZmVhdHVyZS1yZWNvcmQubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXZpZXctcGVybWFsaW5rL2RhdGEtdmlldy1wZXJtYWxpbmsuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXZpZXctc2hhcmUvZGF0YS12aWV3LXNoYXJlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtdmlldy13ZWItY29tcG9uZW50L2RhdGEtdmlldy13ZWItY29tcG9uZW50LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2V4dGVybmFsLXZpZXdlci1idXR0b24vZXh0ZXJuYWwtdmlld2VyLWJ1dHRvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXAtdmlldy9tYXAtdmlldy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncGYtYXBpLWRsL2dwZi1hcGktZGwuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVjb3JkLW1ldGEvcmVjb3JkLW1ldGEuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZXh0ZXJuYWwtdmlld2VyLWJ1dHRvbi9leHRlcm5hbC12aWV3ZXItYnV0dG9uLmNvbXBvbmVudCdcbiJdfQ==
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvcmVjb3JkL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMseURBQXlELENBQUE7QUFDdkUsY0FBYyxxQ0FBcUMsQ0FBQTtBQUNuRCxjQUFjLGlEQUFpRCxDQUFBO0FBQy9ELGNBQWMsaUVBQWlFLENBQUE7QUFDL0UsY0FBYywrREFBK0QsQ0FBQTtBQUM3RSxjQUFjLHVDQUF1QyxDQUFBO0FBQ3JELGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2ZlYXR1cmUtcmVjb3JkLm1vZHVsZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0YXRlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS12aWV3LXBlcm1hbGluay9kYXRhLXZpZXctcGVybWFsaW5rLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS12aWV3LXNoYXJlL2RhdGEtdmlldy1zaGFyZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXZpZXctd2ViLWNvbXBvbmVudC9kYXRhLXZpZXctd2ViLWNvbXBvbmVudC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9leHRlcm5hbC12aWV3ZXItYnV0dG9uL2V4dGVybmFsLXZpZXdlci1idXR0b24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3BmLWFwaS1kbC9ncGYtYXBpLWRsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcC12aWV3L21hcC12aWV3LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlY29yZC1tZXRhL3JlY29yZC1tZXRhLmNvbXBvbmVudCdcbiJdfQ==
|