@ecodev/natural 41.3.0 → 42.0.0
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/ecodev-natural.d.ts +1 -9
- package/esm2020/ecodev-natural.mjs +5 -0
- package/esm2020/lib/classes/abstract-controller.mjs +30 -0
- package/esm2020/lib/classes/abstract-detail.mjs +152 -0
- package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
- package/esm2020/lib/classes/abstract-list.mjs +406 -0
- package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
- package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
- package/esm2020/lib/classes/data-source.mjs +76 -0
- package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
- package/esm2020/lib/classes/query-variable-manager.mjs +161 -0
- package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
- package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
- package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
- package/esm2020/lib/classes/validators.mjs +179 -0
- package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
- package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
- package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
- package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
- package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
- package/esm2020/lib/modules/avatar/component/avatar.component.mjs +187 -0
- package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
- package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
- package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
- package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
- package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/common-module.mjs +54 -0
- package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
- package/esm2020/lib/modules/common/directives/reactive-asterisk.directive.mjs +33 -0
- package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
- package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
- package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
- package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
- package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
- package/{esm2015/lib/modules/common/public-api.js → esm2020/lib/modules/common/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
- package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
- package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
- package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
- package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
- package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
- package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
- package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
- package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
- package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
- package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
- package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
- package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
- package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
- package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
- package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
- package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
- package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
- package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
- package/esm2020/lib/modules/file/file.module.mjs +24 -0
- package/esm2020/lib/modules/file/file.service.mjs +48 -0
- package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
- package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
- package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
- package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
- package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
- package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
- package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
- package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
- package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
- package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
- package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
- package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
- package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
- package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
- package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
- package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
- package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
- package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
- package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
- package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
- package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
- package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
- package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
- package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
- package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
- package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
- package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
- package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
- package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
- package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
- package/esm2020/lib/modules/search/search.module.mjs +84 -0
- package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
- package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
- package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
- package/esm2020/lib/modules/select/select/select.component.mjs +208 -0
- package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +42 -0
- package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +128 -0
- package/esm2020/lib/modules/select/select.module.mjs +68 -0
- package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
- package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
- package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
- package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
- package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
- package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
- package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
- package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
- package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
- package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
- package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
- package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
- package/esm2020/lib/services/abstract-model.service.mjs +509 -0
- package/esm2020/lib/services/enum.service.mjs +67 -0
- package/esm2020/lib/services/link-mutation.service.mjs +153 -0
- package/esm2020/lib/services/persistence.service.mjs +113 -0
- package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
- package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2791 -2361
- package/fesm2015/ecodev-natural.mjs.map +1 -0
- package/fesm2020/ecodev-natural.mjs +10506 -0
- package/fesm2020/ecodev-natural.mjs.map +1 -0
- package/lib/classes/abstract-controller.d.ts +3 -0
- package/lib/classes/abstract-detail.d.ts +3 -0
- package/lib/classes/abstract-editable-list.d.ts +3 -0
- package/lib/classes/abstract-list.d.ts +3 -0
- package/lib/classes/abstract-navigable-list.d.ts +3 -0
- package/lib/directives/http-prefix.directive.d.ts +3 -0
- package/lib/modules/alert/alert.module.d.ts +9 -0
- package/lib/modules/alert/alert.service.d.ts +3 -0
- package/lib/modules/alert/confirm.component.d.ts +3 -0
- package/lib/modules/avatar/avatar.module.d.ts +6 -0
- package/lib/modules/avatar/component/avatar.component.d.ts +3 -0
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
- package/lib/modules/common/common-module.d.ts +16 -0
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
- package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +3 -0
- package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
- package/lib/modules/common/services/memory-storage.d.ts +3 -0
- package/lib/modules/common/services/seo.service.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
- package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
- package/lib/modules/file/abstract-file.d.ts +3 -0
- package/lib/modules/file/component/file.component.d.ts +3 -0
- package/lib/modules/file/file-drop.directive.d.ts +3 -0
- package/lib/modules/file/file-select.directive.d.ts +3 -0
- package/lib/modules/file/file.module.d.ts +11 -0
- package/lib/modules/file/file.service.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
- package/lib/modules/icon/icon.component.d.ts +3 -0
- package/lib/modules/icon/icon.module.d.ts +7 -0
- package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
- package/lib/modules/matomo/matomo.service.d.ts +3 -0
- package/lib/modules/panels/abstract-panel.d.ts +3 -0
- package/lib/modules/panels/panels.component.d.ts +3 -0
- package/lib/modules/panels/panels.module.d.ts +8 -0
- package/lib/modules/panels/panels.service.d.ts +3 -0
- package/lib/modules/relations/relations.component.d.ts +3 -0
- package/lib/modules/relations/relations.module.d.ts +15 -0
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
- package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
- package/lib/modules/search/group/group.component.d.ts +3 -0
- package/lib/modules/search/input/input.component.d.ts +3 -0
- package/lib/modules/search/search/search.component.d.ts +3 -0
- package/lib/modules/search/search.module.d.ts +19 -0
- package/lib/modules/select/abstract-select.component.d.ts +4 -1
- package/lib/modules/select/select/select.component.d.ts +3 -0
- package/lib/modules/select/select-enum/select-enum.component.d.ts +3 -0
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
- package/lib/modules/select/select.module.d.ts +19 -0
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
- package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
- package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
- package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
- package/lib/modules/stamp/stamp.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.module.d.ts +9 -0
- package/lib/services/enum.service.d.ts +3 -0
- package/lib/services/link-mutation.service.d.ts +3 -0
- package/lib/services/persistence.service.d.ts +3 -0
- package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
- package/package.json +25 -12
- package/src/lib/modules/alert/_alert.theme.scss +1 -1
- package/src/lib/modules/file/component/_file.theme.scss +1 -1
- package/src/lib/modules/icon/_icon.theme.scss +1 -1
- package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
- package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
- package/src/lib/styles/_table.scss +1 -1
- package/theming/_natural.theme.scss +1 -1
- package/bundles/ecodev-natural.umd.js +0 -11318
- package/bundles/ecodev-natural.umd.js.map +0 -1
- package/ecodev-natural.metadata.json +0 -1
- package/esm2015/ecodev-natural.js +0 -14
- package/esm2015/lib/classes/abstract-controller.js +0 -29
- package/esm2015/lib/classes/abstract-detail.js +0 -157
- package/esm2015/lib/classes/abstract-editable-list.js +0 -97
- package/esm2015/lib/classes/abstract-list.js +0 -409
- package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
- package/esm2015/lib/classes/data-source.js +0 -76
- package/esm2015/lib/classes/query-variable-manager.js +0 -161
- package/esm2015/lib/classes/validators.js +0 -176
- package/esm2015/lib/directives/http-prefix.directive.js +0 -46
- package/esm2015/lib/modules/alert/alert.module.js +0 -15
- package/esm2015/lib/modules/alert/alert.service.js +0 -59
- package/esm2015/lib/modules/alert/confirm.component.js +0 -17
- package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
- package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
- package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
- package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
- package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
- package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
- package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
- package/esm2015/lib/modules/common/common-module.js +0 -35
- package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
- package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
- package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
- package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
- package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
- package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
- package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
- package/esm2015/lib/modules/common/services/seo.service.js +0 -120
- package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
- package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
- package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
- package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
- package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
- package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
- package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
- package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
- package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
- package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
- package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
- package/esm2015/lib/modules/file/abstract-file.js +0 -223
- package/esm2015/lib/modules/file/component/file.component.js +0 -133
- package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
- package/esm2015/lib/modules/file/file-select.directive.js +0 -25
- package/esm2015/lib/modules/file/file.module.js +0 -19
- package/esm2015/lib/modules/file/file.service.js +0 -47
- package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
- package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
- package/esm2015/lib/modules/icon/icon.component.js +0 -78
- package/esm2015/lib/modules/icon/icon.module.js +0 -25
- package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
- package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
- package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
- package/esm2015/lib/modules/panels/panels.component.js +0 -26
- package/esm2015/lib/modules/panels/panels.module.js +0 -28
- package/esm2015/lib/modules/panels/panels.service.js +0 -331
- package/esm2015/lib/modules/relations/relations.component.js +0 -181
- package/esm2015/lib/modules/relations/relations.module.js +0 -33
- package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
- package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
- package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
- package/esm2015/lib/modules/search/group/group.component.js +0 -39
- package/esm2015/lib/modules/search/input/input.component.js +0 -316
- package/esm2015/lib/modules/search/search/search.component.js +0 -71
- package/esm2015/lib/modules/search/search.module.js +0 -52
- package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
- package/esm2015/lib/modules/select/select/select.component.js +0 -190
- package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
- package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
- package/esm2015/lib/modules/select/select.module.js +0 -39
- package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
- package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
- package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
- package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
- package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
- package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
- package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
- package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
- package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
- package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
- package/esm2015/lib/services/abstract-model.service.js +0 -509
- package/esm2015/lib/services/enum.service.js +0 -68
- package/esm2015/lib/services/link-mutation.service.js +0 -155
- package/esm2015/lib/services/persistence.service.js +0 -114
- package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
- package/fesm2015/ecodev-natural.js.map +0 -1
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
|
2
|
-
import { NavigationEnd, Router } from '@angular/router';
|
|
3
|
-
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
4
|
-
import { Title } from '@angular/platform-browser';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/router";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
import * as i3 from "@angular/platform-browser";
|
|
9
|
-
/**
|
|
10
|
-
* Service to track visitors via Matomo.
|
|
11
|
-
*
|
|
12
|
-
* @dynamic
|
|
13
|
-
*/
|
|
14
|
-
export class NaturalMatomoService {
|
|
15
|
-
constructor(router, document,
|
|
16
|
-
// tslint:disable-next-line:ban-types
|
|
17
|
-
platformId, titleService) {
|
|
18
|
-
this.router = router;
|
|
19
|
-
this.document = document;
|
|
20
|
-
this.platformId = platformId;
|
|
21
|
-
this.titleService = titleService;
|
|
22
|
-
this.subscription = null;
|
|
23
|
-
this.referrerUrl = '';
|
|
24
|
-
this.isBrowser = isPlatformBrowser(platformId);
|
|
25
|
-
const window = this.document.defaultView;
|
|
26
|
-
if (!window) {
|
|
27
|
-
throw new Error('Could not init MatomoService `window` is undefined');
|
|
28
|
-
}
|
|
29
|
-
this.window = window;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Inject Matomo script and start tracking all page navigation
|
|
33
|
-
*/
|
|
34
|
-
startTracking(url, site) {
|
|
35
|
-
// Abort because no tracking info or doing SSR
|
|
36
|
-
if (!url || !site || !this.isBrowser) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
this.push('setTrackerUrl', url + '/matomo.php');
|
|
40
|
-
this.push('setSiteId', site);
|
|
41
|
-
this.injectTrackingCode(url);
|
|
42
|
-
this.listenForRouteChanges();
|
|
43
|
-
}
|
|
44
|
-
stopTracking() {
|
|
45
|
-
var _a;
|
|
46
|
-
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
47
|
-
this.subscription = null;
|
|
48
|
-
delete this.window._paq;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Push a Matomo command on the stack
|
|
52
|
-
*
|
|
53
|
-
* It can be called at any time, including before Matomo is even loaded.
|
|
54
|
-
*
|
|
55
|
-
* Also see https://developer.matomo.org/guides/tracking-javascript-guide
|
|
56
|
-
*/
|
|
57
|
-
push(functionName, ...args) {
|
|
58
|
-
if (!this.window._paq) {
|
|
59
|
-
this.window._paq = [];
|
|
60
|
-
}
|
|
61
|
-
// Here we must always get `_paq` freshly from window, because Matomo
|
|
62
|
-
// might have changed the object after we created it
|
|
63
|
-
this.window._paq.push([functionName, ...args]);
|
|
64
|
-
}
|
|
65
|
-
injectTrackingCode(url) {
|
|
66
|
-
try {
|
|
67
|
-
const script = this.document.createElement('script');
|
|
68
|
-
script.async = true;
|
|
69
|
-
script.defer = true;
|
|
70
|
-
script.src = url + '/matomo.js';
|
|
71
|
-
this.document.head.appendChild(script);
|
|
72
|
-
}
|
|
73
|
-
catch (ex) {
|
|
74
|
-
console.error('Error appending Matomo analytics');
|
|
75
|
-
console.error(ex);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
listenForRouteChanges() {
|
|
79
|
-
this.subscription = this.router.events.subscribe(event => {
|
|
80
|
-
if (!(event instanceof NavigationEnd)) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
const currentUrl = this.window.location.href;
|
|
84
|
-
this.push('setCustomUrl', currentUrl);
|
|
85
|
-
this.push('setDocumentTitle', this.titleService.getTitle());
|
|
86
|
-
if (this.referrerUrl) {
|
|
87
|
-
this.push('setReferrerUrl', this.referrerUrl);
|
|
88
|
-
}
|
|
89
|
-
this.push('trackPageView');
|
|
90
|
-
this.referrerUrl = currentUrl;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
NaturalMatomoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NaturalMatomoService_Factory() { return new NaturalMatomoService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.DOCUMENT), i0.ɵɵinject(i0.PLATFORM_ID), i0.ɵɵinject(i3.Title)); }, token: NaturalMatomoService, providedIn: "root" });
|
|
95
|
-
NaturalMatomoService.decorators = [
|
|
96
|
-
{ type: Injectable, args: [{
|
|
97
|
-
providedIn: 'root',
|
|
98
|
-
},] }
|
|
99
|
-
];
|
|
100
|
-
NaturalMatomoService.ctorParameters = () => [
|
|
101
|
-
{ type: Router },
|
|
102
|
-
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
103
|
-
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
|
|
104
|
-
{ type: Title }
|
|
105
|
-
];
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0b21vLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9tYXRvbW8vbWF0b21vLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTVELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUF1QmhEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCLFlBQ3FCLE1BQWMsRUFDSSxRQUFrQjtJQUNyRCxxQ0FBcUM7SUFDUCxVQUFrQixFQUMvQixZQUFtQjtRQUpuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUV2QixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBVmhDLGlCQUFZLEdBQXdCLElBQUksQ0FBQztRQUd6QyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQVNyQixJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDekU7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsR0FBa0Is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QVc7WUF6Q25CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0RPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG4vKipcbiAqIEluY29tcGxldGUgbGlzdCBvZiBNYXRvbW8gZnVuY3Rpb25zLiBCdXQgaXQgc2hvdWxkIGJlIGVub3VnaFxuICogZm9yIG91ciBiYXNpYyBuZWVkcy5cbiAqXG4gKiBUbyBjb21wbGV0ZSB0aGlzIGxpc3QsIG1heWJlIHNlZSBodHRwczovL2RldmVsb3Blci5tYXRvbW8ub3JnL2d1aWRlcy90cmFja2luZy1qYXZhc2NyaXB0LWd1aWRlXG4gKi9cbnR5cGUgTWF0b21vRnVuY3Rpb24gPVxuICAgIHwgJ3NldEN1c3RvbVVybCdcbiAgICB8ICdzZXRDdXN0b21WYXJpYWJsZSdcbiAgICB8ICdzZXREb2N1bWVudFRpdGxlJ1xuICAgIHwgJ3NldFJlZmVycmVyVXJsJ1xuICAgIHwgJ3NldFNpdGVJZCdcbiAgICB8ICdzZXRUcmFja2VyVXJsJ1xuICAgIHwgJ3RyYWNrUGFnZVZpZXcnO1xuXG5leHBvcnQgdHlwZSBQYXFJdGVtID0gW01hdG9tb0Z1bmN0aW9uLCAuLi4obnVtYmVyIHwgc3RyaW5nIHwgbnVsbClbXV07XG5cbmludGVyZmFjZSBQYXEge1xuICAgIHB1c2g6IChpdGVtOiBQYXFJdGVtKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gdHJhY2sgdmlzaXRvcnMgdmlhIE1hdG9tby5cbiAqXG4gKiBAZHluYW1pY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsTWF0b21vU2VydmljZSB7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93OiBXaW5kb3dQcm94eSAmIHR5cGVvZiBnbG9iYWxUaGlzICYge19wYXE/OiBQYXF9O1xuICAgIHByaXZhdGUgcmVmZXJyZXJVcmwgPSAnJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmJhbi10eXBlc1xuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgaWYgKCF3aW5kb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGluaXQgTWF0b21vU2VydmljZSBgd2luZG93YCBpcyB1bmRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2luZG93ID0gd2luZG93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluamVjdCBNYXRvbW8gc2NyaXB0IGFuZCBzdGFydCB0cmFja2luZyBhbGwgcGFnZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0VHJhY2tpbmcodXJsOiBzdHJpbmcgfCBudWxsLCBzaXRlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIC8vIEFib3J0IGJlY2F1c2Ugbm8gdHJhY2tpbmcgaW5mbyBvciBkb2luZyBTU1JcbiAgICAgICAgaWYgKCF1cmwgfHwgIXNpdGUgfHwgIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2goJ3NldFRyYWNrZXJVcmwnLCB1cmwgKyAnL21hdG9tby5waHAnKTtcbiAgICAgICAgdGhpcy5wdXNoKCdzZXRTaXRlSWQnLCBzaXRlKTtcblxuICAgICAgICB0aGlzLmluamVjdFRyYWNraW5nQ29kZSh1cmwpO1xuICAgICAgICB0aGlzLmxpc3RlbkZvclJvdXRlQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wVHJhY2tpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLndpbmRvdy5fcGFxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1c2ggYSBNYXRvbW8gY29tbWFuZCBvbiB0aGUgc3RhY2tcbiAgICAgKlxuICAgICAqIEl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGluY2x1ZGluZyBiZWZvcmUgTWF0b21vIGlzIGV2ZW4gbG9hZGVkLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubWF0b21vLm9yZy9ndWlkZXMvdHJhY2tpbmctamF2YXNjcmlwdC1ndWlkZVxuICAgICAqL1xuICAgIHB1YmxpYyBwdXNoKGZ1bmN0aW9uTmFtZTogUGFxSXRlbVswXSwgLi4uYXJnczogUGFxSXRlbVsxXVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53aW5kb3cuX3BhcSkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cuX3BhcSA9IFtdIGFzIGFueVtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVyZSB3ZSBtdXN0IGFsd2F5cyBnZXQgYF9wYXFgIGZyZXNobHkgZnJvbSB3aW5kb3csIGJlY2F1c2UgTWF0b21vXG4gICAgICAgIC8vIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgb2JqZWN0IGFmdGVyIHdlIGNyZWF0ZWQgaXRcbiAgICAgICAgdGhpcy53aW5kb3cuX3BhcS5wdXNoKFtmdW5jdGlvbk5hbWUsIC4uLmFyZ3NdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdFRyYWNraW5nQ29kZSh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHVybCArICcvbWF0b21vLmpzJztcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYXBwZW5kaW5nIE1hdG9tbyBhbmFseXRpY3MnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaXN0ZW5Gb3JSb3V0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy53aW5kb3cubG9jYXRpb24uaHJlZjtcblxuICAgICAgICAgICAgdGhpcy5wdXNoKCdzZXRDdXN0b21VcmwnLCBjdXJyZW50VXJsKTtcbiAgICAgICAgICAgIHRoaXMucHVzaCgnc2V0RG9jdW1lbnRUaXRsZScsIHRoaXMudGl0bGVTZXJ2aWNlLmdldFRpdGxlKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVmZXJyZXJVcmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2goJ3NldFJlZmVycmVyVXJsJywgdGhpcy5yZWZlcnJlclVybCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHVzaCgndHJhY2tQYWdlVmlldycpO1xuXG4gICAgICAgICAgICB0aGlzLnJlZmVycmVyVXJsID0gY3VycmVudFVybDtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
// tslint:disable:directive-class-suffix
|
|
2
|
-
import { Directive, HostBinding, HostListener } from '@angular/core';
|
|
3
|
-
import { merge } from 'lodash-es';
|
|
4
|
-
import { NaturalAbstractController } from '../../classes/abstract-controller';
|
|
5
|
-
export class NaturalAbstractPanel extends NaturalAbstractController {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
/**
|
|
9
|
-
* The data property is the container where the resolved content is stored
|
|
10
|
-
* When loading a component from a panel opening (dialog), receives the data provided by the service
|
|
11
|
-
*/
|
|
12
|
-
this.data = {};
|
|
13
|
-
/**
|
|
14
|
-
* Bind isFrontPanel style class on root component
|
|
15
|
-
*/
|
|
16
|
-
this.isFrontPanel = false;
|
|
17
|
-
/**
|
|
18
|
-
* Bind isPanel style class on root component
|
|
19
|
-
*/
|
|
20
|
-
this.isPanel = false;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Bind click on panels, to allow the selection of those who are behind
|
|
24
|
-
*/
|
|
25
|
-
clickPanel() {
|
|
26
|
-
if (!this.isFrontPanel && this.panelService) {
|
|
27
|
-
this.panelService.goToPanelByComponent(this);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Called when panel opens and component is loaded
|
|
32
|
-
* Runs before ngOnInit()
|
|
33
|
-
*/
|
|
34
|
-
initPanel(panelData) {
|
|
35
|
-
this.panelData = panelData;
|
|
36
|
-
this.isPanel = true;
|
|
37
|
-
if (this.panelData && this.panelData.data) {
|
|
38
|
-
merge(this.data, this.panelData.data);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
NaturalAbstractPanel.decorators = [
|
|
43
|
-
{ type: Directive }
|
|
44
|
-
];
|
|
45
|
-
NaturalAbstractPanel.propDecorators = {
|
|
46
|
-
isFrontPanel: [{ type: HostBinding, args: ['class.isFrontPanel',] }],
|
|
47
|
-
isPanel: [{ type: HostBinding, args: ['class.isPanel',] }],
|
|
48
|
-
clickPanel: [{ type: HostListener, args: ['click',] }]
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBSzVFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx5QkFBeUI7SUFEbkU7O1FBRUk7OztXQUdHO1FBQ0ksU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUV0Qjs7V0FFRztRQUN1QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUUvRDs7V0FFRztRQUNrQyxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBK0J6RCxDQUFDO0lBdEJHOztPQUVHO0lBRUksVUFBVTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsU0FBMkI7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDOzs7WUE5Q0osU0FBUzs7OzJCQVdMLFdBQVcsU0FBQyxvQkFBb0I7c0JBS2hDLFdBQVcsU0FBQyxlQUFlO3lCQVkzQixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmltcG9ydCB7RGlyZWN0aXZlLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge05hdHVyYWxQYW5lbHNTZXJ2aWNlfSBmcm9tICcuL3BhbmVscy5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbFBhbmVsRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdFBhbmVsIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0Q29udHJvbGxlciB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgcHJvcGVydHkgaXMgdGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgcmVzb2x2ZWQgY29udGVudCBpcyBzdG9yZWRcbiAgICAgKiBXaGVuIGxvYWRpbmcgYSBjb21wb25lbnQgZnJvbSBhIHBhbmVsIG9wZW5pbmcgKGRpYWxvZyksIHJlY2VpdmVzIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICovXG4gICAgcHVibGljIGRhdGE6IGFueSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQmluZCBpc0Zyb250UGFuZWwgc3R5bGUgY2xhc3Mgb24gcm9vdCBjb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzRnJvbnRQYW5lbCcpIHB1YmxpYyBpc0Zyb250UGFuZWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEJpbmQgaXNQYW5lbCBzdHlsZSBjbGFzcyBvbiByb290IGNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaXNQYW5lbCcpIHB1YmxpYyBpc1BhbmVsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBNZXJnaW5nIG9mIGRhdGEgcHJvdmlkZWQgYnkgdGhlIHZlcnkgcm9vdCBjb21wb25lbnQgKHRoYXQgaXMgaW4gYSByb3V0ZSBjb250ZXh0KSBhbmQgaW5oZXJpdGVkIGRhdGEgdGhyb3VnaCBwYW5lbHNcbiAgICAgKiBAVE9ETyA6IHByb3ZpZGUgdHlwZSB3aXRoIGF2YWlsYWJsZSBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHVibGljIHBhbmVsRGF0YT86IE5hdHVyYWxQYW5lbERhdGE7XG4gICAgcHVibGljIHBhbmVsU2VydmljZT86IE5hdHVyYWxQYW5lbHNTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQmluZCBjbGljayBvbiBwYW5lbHMsIHRvIGFsbG93IHRoZSBzZWxlY3Rpb24gb2YgdGhvc2Ugd2hvIGFyZSBiZWhpbmRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIGNsaWNrUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0Zyb250UGFuZWwgJiYgdGhpcy5wYW5lbFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlLmdvVG9QYW5lbEJ5Q29tcG9uZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gcGFuZWwgb3BlbnMgYW5kIGNvbXBvbmVudCBpcyBsb2FkZWRcbiAgICAgKiBSdW5zIGJlZm9yZSBuZ09uSW5pdCgpXG4gICAgICovXG4gICAgcHVibGljIGluaXRQYW5lbChwYW5lbERhdGE6IE5hdHVyYWxQYW5lbERhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYW5lbERhdGEgPSBwYW5lbERhdGE7XG4gICAgICAgIHRoaXMuaXNQYW5lbCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMucGFuZWxEYXRhICYmIHRoaXMucGFuZWxEYXRhLmRhdGEpIHtcbiAgICAgICAgICAgIG1lcmdlKHRoaXMuZGF0YSwgdGhpcy5wYW5lbERhdGEuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute } from '@angular/router';
|
|
3
|
-
import { NaturalPanelsService } from './panels.service';
|
|
4
|
-
export class NaturalPanelsComponent {
|
|
5
|
-
// PanelsComponent is kind of a "ghost" component to respond to an url matcher in route config,
|
|
6
|
-
// An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/
|
|
7
|
-
constructor(panelsService, route) {
|
|
8
|
-
this.panelsService = panelsService;
|
|
9
|
-
this.route = route;
|
|
10
|
-
this.panelsService.start(route);
|
|
11
|
-
}
|
|
12
|
-
ngOnDestroy() {
|
|
13
|
-
this.panelsService.stop();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
NaturalPanelsComponent.decorators = [
|
|
17
|
-
{ type: Component, args: [{
|
|
18
|
-
selector: 'natural-panels',
|
|
19
|
-
template: ''
|
|
20
|
-
},] }
|
|
21
|
-
];
|
|
22
|
-
NaturalPanelsComponent.ctorParameters = () => [
|
|
23
|
-
{ type: NaturalPanelsService },
|
|
24
|
-
{ type: ActivatedRoute }
|
|
25
|
-
];
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3BhbmVscy9wYW5lbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBTXRELE1BQU0sT0FBTyxzQkFBc0I7SUFDL0IsK0ZBQStGO0lBQy9GLHFJQUFxSTtJQUNySSxZQUE2QixhQUFtQyxFQUFtQixLQUFxQjtRQUEzRSxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDcEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7OztZQWJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixRQUFRLEVBQUUsRUFBRTthQUNmOzs7WUFMTyxvQkFBb0I7WUFEcEIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TmF0dXJhbFBhbmVsc1NlcnZpY2V9IGZyb20gJy4vcGFuZWxzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtcGFuZWxzJyxcbiAgICB0ZW1wbGF0ZTogJycsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQYW5lbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8vIFBhbmVsc0NvbXBvbmVudCBpcyBraW5kIG9mIGEgXCJnaG9zdFwiIGNvbXBvbmVudCB0byByZXNwb25kIHRvIGFuIHVybCBtYXRjaGVyIGluIHJvdXRlIGNvbmZpZyxcbiAgICAvLyBBbiBVcmxNYXRjaGVyIChtYXRjaGVyIGF0dHJpYnV0ZSkgaXMgcmVxdWlyZWQgdG8gY2F0Y2ggdXJscyB3aXRoIGFuIHVuZGVmaW5lZCBudW1iZXIgb2YgcGFyYW1zIGluIHVybCBhZnRlciBhIGdpdmVuIHBhcmFtIC9wYW5lbHMvXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYW5lbHNTZXJ2aWNlOiBOYXR1cmFsUGFuZWxzU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgdGhpcy5wYW5lbHNTZXJ2aWNlLnN0YXJ0KHJvdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFuZWxzU2VydmljZS5zdG9wKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
4
|
-
import { RouterModule } from '@angular/router';
|
|
5
|
-
import { NaturalPanelsComponent } from './panels.component';
|
|
6
|
-
import { PanelsHooksConfig } from './types';
|
|
7
|
-
const declarations = [NaturalPanelsComponent];
|
|
8
|
-
export class NaturalPanelsModule {
|
|
9
|
-
static forRoot(hooks) {
|
|
10
|
-
return {
|
|
11
|
-
ngModule: NaturalPanelsModule,
|
|
12
|
-
providers: [
|
|
13
|
-
{
|
|
14
|
-
provide: PanelsHooksConfig,
|
|
15
|
-
useValue: hooks,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
NaturalPanelsModule.decorators = [
|
|
22
|
-
{ type: NgModule, args: [{
|
|
23
|
-
declarations: declarations,
|
|
24
|
-
imports: [CommonModule, RouterModule, MatDialogModule],
|
|
25
|
-
exports: declarations,
|
|
26
|
-
},] }
|
|
27
|
-
];
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3BhbmVscy9wYW5lbHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQXNCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBMkIsaUJBQWlCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFcEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBTzlDLE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFnQztRQUNsRCxPQUFPO1lBQ0gsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsUUFBUSxFQUFFLEtBQUs7aUJBQ2xCO2FBQ0o7U0FDSixDQUFDO0lBQ04sQ0FBQzs7O1lBaEJKLFFBQVEsU0FBQztnQkFDTixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUM7Z0JBQ3RELE9BQU8sRUFBRSxZQUFZO2FBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0RGlhbG9nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge05hdHVyYWxQYW5lbHNDb21wb25lbnR9IGZyb20gJy4vcGFuZWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge05hdHVyYWxQYW5lbHNIb29rc0NvbmZpZywgUGFuZWxzSG9va3NDb25maWd9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbTmF0dXJhbFBhbmVsc0NvbXBvbmVudF07XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBNYXREaWFsb2dNb2R1bGVdLFxuICAgIGV4cG9ydHM6IGRlY2xhcmF0aW9ucyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBhbmVsc01vZHVsZSB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290KGhvb2tzPzogTmF0dXJhbFBhbmVsc0hvb2tzQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOYXR1cmFsUGFuZWxzTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogTmF0dXJhbFBhbmVsc01vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogUGFuZWxzSG9va3NDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBob29rcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { MediaObserver } from '@angular/flex-layout';
|
|
3
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
4
|
-
import { DefaultUrlSerializer, NavigationError, Router } from '@angular/router';
|
|
5
|
-
import { differenceWith, flatten, isEqual } from 'lodash-es';
|
|
6
|
-
import { forkJoin, of, Subject } from 'rxjs';
|
|
7
|
-
import { map } from 'rxjs/operators';
|
|
8
|
-
import { getStackConfig } from './panels.urlmatcher';
|
|
9
|
-
import { PanelsHooksConfig, } from './types';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/router";
|
|
12
|
-
import * as i2 from "@angular/material/dialog";
|
|
13
|
-
import * as i3 from "./types";
|
|
14
|
-
import * as i4 from "@angular/flex-layout/core";
|
|
15
|
-
function segmentsToString(segments) {
|
|
16
|
-
return segments.map(s => s.toString()).join('/');
|
|
17
|
-
}
|
|
18
|
-
function compareConfigs(a, b) {
|
|
19
|
-
return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* TODO: implement route update when closing dialog with escape
|
|
23
|
-
* @dynamic
|
|
24
|
-
*/
|
|
25
|
-
export class NaturalPanelsService {
|
|
26
|
-
constructor(router, dialog, injector, hooksConfig, mediaService) {
|
|
27
|
-
this.router = router;
|
|
28
|
-
this.dialog = dialog;
|
|
29
|
-
this.injector = injector;
|
|
30
|
-
this.hooksConfig = hooksConfig;
|
|
31
|
-
this.mediaService = mediaService;
|
|
32
|
-
/**
|
|
33
|
-
* Stream that emits when all open dialog have finished closing
|
|
34
|
-
*/
|
|
35
|
-
this.afterAllClosed = new Subject();
|
|
36
|
-
/**
|
|
37
|
-
* Cache for panels counter. Works more like an ID.
|
|
38
|
-
* Is used to give an unique identifier to multiple similar panels configurations
|
|
39
|
-
*/
|
|
40
|
-
this.counter = 1;
|
|
41
|
-
/**
|
|
42
|
-
* Class applied to dialog overlay related with panels
|
|
43
|
-
* If change, change CSS too
|
|
44
|
-
*/
|
|
45
|
-
this.panelClass = 'panel';
|
|
46
|
-
/**
|
|
47
|
-
* Cache for panels setup before navigation change.
|
|
48
|
-
* Used to detect panels openings/closings and adapt for new configuration
|
|
49
|
-
*/
|
|
50
|
-
this.oldFullConfig = [];
|
|
51
|
-
/**
|
|
52
|
-
* Horizontal gaps between panels
|
|
53
|
-
*/
|
|
54
|
-
this.panelsOffsetH = 35;
|
|
55
|
-
/**
|
|
56
|
-
* Vertical gaps between panels
|
|
57
|
-
*/
|
|
58
|
-
this.panelsOffsetV = 40;
|
|
59
|
-
/**
|
|
60
|
-
* Cache of previous screen size
|
|
61
|
-
* Used to change panels stack orientation on small screens
|
|
62
|
-
*/
|
|
63
|
-
this.media = null;
|
|
64
|
-
// Watch media to know if display panels horizontally or vertically
|
|
65
|
-
this.mediaService.asObservable().subscribe(medias => {
|
|
66
|
-
for (const media of medias) {
|
|
67
|
-
if (!this.media) {
|
|
68
|
-
this.media = media.mqAlias;
|
|
69
|
-
}
|
|
70
|
-
else if (this.media !== media.mqAlias) {
|
|
71
|
-
this.media = media.mqAlias;
|
|
72
|
-
this.updateComponentsPosition();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
static get opened() {
|
|
78
|
-
return this._opened;
|
|
79
|
-
}
|
|
80
|
-
start(route) {
|
|
81
|
-
NaturalPanelsService._opened = true;
|
|
82
|
-
this.routeSub = route.url.subscribe(segments => {
|
|
83
|
-
this.updatePanels(segments, route.snapshot.data.panelsRoutes);
|
|
84
|
-
});
|
|
85
|
-
this.navSub = this.router.events.subscribe(ev => {
|
|
86
|
-
if (!(ev instanceof NavigationError)) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// Abort and propagate navigation error
|
|
90
|
-
if (ev.url.endsWith('/')) {
|
|
91
|
-
this.stop();
|
|
92
|
-
// This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism
|
|
93
|
-
this.router.navigateByUrl('panels-reached-invalid-url');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.counter++;
|
|
97
|
-
// pc stands for "panel counter", required to give an identification to panels with exact same config
|
|
98
|
-
// E.g /new
|
|
99
|
-
const wantedUrl = ev.url + ';pc=' + this.counter;
|
|
100
|
-
// Segments matching from wanted url. E.g ~ ['new']
|
|
101
|
-
const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;
|
|
102
|
-
// Don't match any config
|
|
103
|
-
const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);
|
|
104
|
-
if (wantedConfig.length) {
|
|
105
|
-
return this.appendConfigToCurrentUrl(wantedConfig);
|
|
106
|
-
}
|
|
107
|
-
// Currently activated routes. E.g ['objective', 'objective', 123, 'risk']
|
|
108
|
-
const currentSegments = flatten(this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments));
|
|
109
|
-
// Last segment. E.g ['risk']
|
|
110
|
-
const lastOfCurrentSegments = currentSegments.slice(-1);
|
|
111
|
-
// Config for ['risk', 'new']
|
|
112
|
-
const currentAndWantedConfig = getStackConfig(lastOfCurrentSegments.concat(wantedUrSegments), route.snapshot.data.panelsRoutes, this.injector);
|
|
113
|
-
return this.appendConfigToCurrentUrl(currentAndWantedConfig);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Uses given configuration to add in the end of current url
|
|
118
|
-
* Neutralizes router error handling
|
|
119
|
-
*/
|
|
120
|
-
appendConfigToCurrentUrl(config) {
|
|
121
|
-
const originalErrorHandler = this.router.errorHandler;
|
|
122
|
-
// Nullify error handler (will be de-neutralized after route redirection)
|
|
123
|
-
if (config) {
|
|
124
|
-
this.router.errorHandler = () => { };
|
|
125
|
-
}
|
|
126
|
-
// Navigate to same url + /risk/new Result : /risk/risk/new
|
|
127
|
-
const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');
|
|
128
|
-
this.router.navigateByUrl(this.router.url + '/' + newUrl).then(() => {
|
|
129
|
-
// After navigation has ended, restore original error handler because he's not a bad guy
|
|
130
|
-
this.router.errorHandler = originalErrorHandler;
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
stop() {
|
|
134
|
-
var _a, _b;
|
|
135
|
-
NaturalPanelsService._opened = false;
|
|
136
|
-
(_a = this.routeSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
137
|
-
(_b = this.navSub) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
138
|
-
this.dialog.closeAll();
|
|
139
|
-
this.oldFullConfig = [];
|
|
140
|
-
this.afterAllClosed.next();
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Go to panel matching given component. Causes an url change.
|
|
144
|
-
*/
|
|
145
|
-
goToPanelByComponent(component) {
|
|
146
|
-
this.goToPanelByIndex(this.getPanelIndex(component));
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Go to panel matching given component. Causes an url change.
|
|
150
|
-
*/
|
|
151
|
-
goToPenultimatePanel() {
|
|
152
|
-
this.goToPanelByIndex(this.dialog.openDialogs.length - 2);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Calls the new url that only includes the segments from the panels we want to stay open
|
|
156
|
-
*/
|
|
157
|
-
goToPanelByIndex(index) {
|
|
158
|
-
// Extracts url segments from next panel until last one
|
|
159
|
-
const url = this.dialog.openDialogs
|
|
160
|
-
.slice(index + 1)
|
|
161
|
-
.map(dialog => {
|
|
162
|
-
return segmentsToString(dialog.componentInstance.panelData.config.route.segments);
|
|
163
|
-
})
|
|
164
|
-
.join('/');
|
|
165
|
-
// Remove extra segments and redirects to root
|
|
166
|
-
this.router.navigateByUrl(this.router.url.replace('/' + url, ''));
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Selecting a panel is equivalent to close all those that are in front of him
|
|
170
|
-
* @param index of panel in stack. The most behind (the first one) is 0.
|
|
171
|
-
*/
|
|
172
|
-
selectPanelByIndex(index) {
|
|
173
|
-
const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];
|
|
174
|
-
// Update new panels set positions
|
|
175
|
-
this.updateComponentsPosition();
|
|
176
|
-
for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {
|
|
177
|
-
this.dialog.openDialogs[i].close();
|
|
178
|
-
}
|
|
179
|
-
return lastDialog.afterClosed();
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Open new panels if url has changed with new segments
|
|
183
|
-
*/
|
|
184
|
-
updatePanels(segments, routes) {
|
|
185
|
-
// Transform url segments into a config with component name and ID if provided in next segment
|
|
186
|
-
// Returns an array of configs, each config represents the content relative to a panel
|
|
187
|
-
const newFullConfig = getStackConfig(segments, routes, this.injector);
|
|
188
|
-
const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);
|
|
189
|
-
const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);
|
|
190
|
-
const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;
|
|
191
|
-
if (configsToRemove.length && configsToAdd.length) {
|
|
192
|
-
// Add and remove panels
|
|
193
|
-
this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {
|
|
194
|
-
this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
else if (configsToRemove.length && !configsToAdd.length) {
|
|
198
|
-
// only remove panels
|
|
199
|
-
this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());
|
|
200
|
-
}
|
|
201
|
-
else if (!configsToRemove.length && configsToAdd.length) {
|
|
202
|
-
// only add panels
|
|
203
|
-
this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());
|
|
204
|
-
}
|
|
205
|
-
this.oldFullConfig = newFullConfig;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Resolve all services, then open panels
|
|
209
|
-
*/
|
|
210
|
-
openPanels(newItemsConfig, fullConfig) {
|
|
211
|
-
const subject = new Subject();
|
|
212
|
-
// Resolve everything before opening a single panel
|
|
213
|
-
const resolves = newItemsConfig.map((conf) => this.getResolvedData(conf));
|
|
214
|
-
// ForkJoin emits when all promises are executed;
|
|
215
|
-
forkJoin(resolves).subscribe(resolvedResult => {
|
|
216
|
-
// For each new config entry, open a new panel
|
|
217
|
-
for (let i = 0; i < newItemsConfig.length; i++) {
|
|
218
|
-
const config = newItemsConfig[i];
|
|
219
|
-
let itemData = {
|
|
220
|
-
// Config of actual panel route
|
|
221
|
-
config: config,
|
|
222
|
-
// Data resolved by service
|
|
223
|
-
// Use in component by calling this.panelData.data.xyz
|
|
224
|
-
data: resolvedResult[i],
|
|
225
|
-
linkableObjects: [],
|
|
226
|
-
};
|
|
227
|
-
if (this.hooksConfig && this.hooksConfig.beforeOpenPanel) {
|
|
228
|
-
const event = {
|
|
229
|
-
itemData: itemData,
|
|
230
|
-
panelConfig: config,
|
|
231
|
-
resolvedResult: resolvedResult,
|
|
232
|
-
fullPanelsConfig: fullConfig,
|
|
233
|
-
};
|
|
234
|
-
itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);
|
|
235
|
-
}
|
|
236
|
-
this.openPanel(config.component, itemData);
|
|
237
|
-
}
|
|
238
|
-
this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {
|
|
239
|
-
subject.next(null);
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
return subject;
|
|
243
|
-
}
|
|
244
|
-
getResolvedData(config) {
|
|
245
|
-
if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {
|
|
246
|
-
return of({});
|
|
247
|
-
}
|
|
248
|
-
const resolveKeys = Object.keys(config.resolve);
|
|
249
|
-
const resolvedData = {};
|
|
250
|
-
resolveKeys.forEach(key => {
|
|
251
|
-
resolvedData[key] = config.resolve[key].resolve(config);
|
|
252
|
-
});
|
|
253
|
-
return forkJoin(resolvedData).pipe(map(result => {
|
|
254
|
-
return result.model || result;
|
|
255
|
-
}));
|
|
256
|
-
}
|
|
257
|
-
openPanel(componentOrTemplateRef, data) {
|
|
258
|
-
const conf = {
|
|
259
|
-
panelClass: this.panelClass,
|
|
260
|
-
closeOnNavigation: false,
|
|
261
|
-
hasBackdrop: this.dialog.openDialogs.length === 0,
|
|
262
|
-
height: '100%',
|
|
263
|
-
width: '960px',
|
|
264
|
-
position: {
|
|
265
|
-
top: '0',
|
|
266
|
-
right: '0',
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
const dialogRef = this.dialog.open(componentOrTemplateRef, conf);
|
|
270
|
-
// Panelisable interface attributes/functions
|
|
271
|
-
dialogRef.componentInstance.initPanel(data);
|
|
272
|
-
dialogRef.beforeClosed().subscribe(() => {
|
|
273
|
-
const index = this.getPanelIndex(dialogRef.componentInstance);
|
|
274
|
-
this.goToPanelByIndex(index - 1);
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Return panel position (index) by searching matching component
|
|
279
|
-
*/
|
|
280
|
-
getPanelIndex(component) {
|
|
281
|
-
if (!component) {
|
|
282
|
-
return -1;
|
|
283
|
-
}
|
|
284
|
-
return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Repositions panels from start until given index
|
|
288
|
-
*/
|
|
289
|
-
updateComponentsPosition() {
|
|
290
|
-
if (!this.dialog.openDialogs.length) {
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
// Select the panels that are still opened, ignore the others because they'll be closed
|
|
294
|
-
const affectedElements = this.dialog.openDialogs;
|
|
295
|
-
for (let i = 0; i < affectedElements.length; i++) {
|
|
296
|
-
const dialog = affectedElements[i];
|
|
297
|
-
// Set all panels as "hidden" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding
|
|
298
|
-
dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;
|
|
299
|
-
dialog.componentInstance.panelService = this;
|
|
300
|
-
// Assign offset
|
|
301
|
-
const deep = affectedElements.length - 1 - i;
|
|
302
|
-
let position = { right: deep * this.panelsOffsetH + 'px' };
|
|
303
|
-
if (this.media === 'xs' && affectedElements.length > 1) {
|
|
304
|
-
position = {
|
|
305
|
-
top: i * this.panelsOffsetV + 'px',
|
|
306
|
-
right: '0px',
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
dialog.updatePosition(position);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Because of this static property Panels are **not** compatible with SSR.
|
|
315
|
-
* And we cannot make it non-static, because `UrlMatcher` cannot be injected.
|
|
316
|
-
*/
|
|
317
|
-
NaturalPanelsService._opened = false;
|
|
318
|
-
NaturalPanelsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NaturalPanelsService_Factory() { return new NaturalPanelsService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.MatDialog), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i3.PanelsHooksConfig), i0.ɵɵinject(i4.MediaObserver)); }, token: NaturalPanelsService, providedIn: "root" });
|
|
319
|
-
NaturalPanelsService.decorators = [
|
|
320
|
-
{ type: Injectable, args: [{
|
|
321
|
-
providedIn: 'root',
|
|
322
|
-
},] }
|
|
323
|
-
];
|
|
324
|
-
NaturalPanelsService.ctorParameters = () => [
|
|
325
|
-
{ type: Router },
|
|
326
|
-
{ type: MatDialog },
|
|
327
|
-
{ type: Injector },
|
|
328
|
-
{ type: undefined, decorators: [{ type: Inject, args: [PanelsHooksConfig,] }] },
|
|
329
|
-
{ type: MediaObserver }
|
|
330
|
-
];
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBTUgsaUJBQWlCLEdBQ3BCLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFFakIsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQjtJQUM1QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDaEUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENB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WUFEN0QsU0FBUztZQUZXLFFBQVE7NENBOEYzQixNQUFNLFNBQUMsaUJBQWlCO1lBN0Z6QixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lZGlhT2JzZXJ2ZXJ9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge2dldFN0YWNrQ29uZmlnfSBmcm9tICcuL3BhbmVscy51cmxtYXRjaGVyJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFBhbmVsQ29uZmlnLFxuICAgIE5hdHVyYWxQYW5lbERhdGEsXG4gICAgTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCxcbiAgICBOYXR1cmFsUGFuZWxzSG9va3NDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGUsXG4gICAgUGFuZWxzSG9va3NDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBzZWdtZW50c1RvU3RyaW5nKHNlZ21lbnRzOiBVcmxTZWdtZW50W10pOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWdtZW50cy5tYXAocyA9PiBzLnRvU3RyaW5nKCkpLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZUNvbmZpZ3MoYTogTmF0dXJhbFBhbmVsQ29uZmlnLCBiOiBOYXR1cmFsUGFuZWxDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5yb3V0ZS5wYXRoID09PSBiLnJvdXRlLnBhdGggJiYgYS5ydWxlID09PSBiLnJ1bGUgJiYgaXNFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpO1xufVxuXG4vKipcbiAqIFRPRE86IGltcGxlbWVudCByb3V0ZSB1cGRhdGUgd2hlbiBjbG9zaW5nIGRpYWxvZyB3aXRoIGVzY2FwZVxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBhbmVsc1NlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzdGF0aWMgcHJvcGVydHkgUGFuZWxzIGFyZSAqKm5vdCoqIGNvbXBhdGlibGUgd2l0aCBTU1IuXG4gICAgICogQW5kIHdlIGNhbm5vdCBtYWtlIGl0IG5vbi1zdGF0aWMsIGJlY2F1c2UgYFVybE1hdGNoZXJgIGNhbm5vdCBiZSBpbmplY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfb3BlbmVkID0gZmFsc2U7XG4gICAgcHVibGljIHN0YXRpYyBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gYWxsIG9wZW4gZGlhbG9nIGhhdmUgZmluaXNoZWQgY2xvc2luZ1xuICAgICAqL1xuICAgIHB1YmxpYyBhZnRlckFsbENsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBjb3VudGVyLiBXb3JrcyBtb3JlIGxpa2UgYW4gSUQuXG4gICAgICogSXMgdXNlZCB0byBnaXZlIGFuIHVuaXF1ZSBpZGVudGlmaWVyIHRvIG11bHRpcGxlIHNpbWlsYXIgcGFuZWxzIGNvbmZpZ3VyYXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBhcHBsaWVkIHRvIGRpYWxvZyBvdmVybGF5IHJlbGF0ZWQgd2l0aCBwYW5lbHNcbiAgICAgKiBJZiBjaGFuZ2UsIGNoYW5nZSBDU1MgdG9vXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbENsYXNzID0gJ3BhbmVsJztcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBwYW5lbHMgc2V0dXAgYmVmb3JlIG5hdmlnYXRpb24gY2hhbmdlLlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IHBhbmVscyBvcGVuaW5ncy9jbG9zaW5ncyBhbmQgYWRhcHQgZm9yIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbGRGdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBzdWJzY3JpcHRpb24gc3RvcFxuICAgICAqL1xuICAgIHByaXZhdGUgbmF2U3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRIID0gMzU7XG5cbiAgICAvKipcbiAgICAgKiBWZXJ0aWNhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRWID0gNDA7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBvZiBwcmV2aW91cyBzY3JlZW4gc2l6ZVxuICAgICAqIFVzZWQgdG8gY2hhbmdlIHBhbmVscyBzdGFjayBvcmllbnRhdGlvbiBvbiBzbWFsbCBzY3JlZW5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZWRpYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoUGFuZWxzSG9va3NDb25maWcpIHByaXZhdGUgaG9va3NDb25maWc6IE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhT2JzZXJ2ZXIsXG4gICAgKSB7XG4gICAgICAgIC8vIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgdGhpcy5tZWRpYVNlcnZpY2UuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKG1lZGlhcyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lZGlhIG9mIG1lZGlhcykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhID0gbWVkaWEubXFBbGlhcztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVkaWEgIT09IG1lZGlhLm1xQWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYSA9IG1lZGlhLm1xQWxpYXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XG4gICAgICAgIE5hdHVyYWxQYW5lbHNTZXJ2aWNlLl9vcGVuZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViID0gcm91dGUudXJsLnN1YnNjcmliZShzZWdtZW50cyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhbmVscyhzZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXYgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBYm9ydCBhbmQgcHJvcGFnYXRlIG5hdmlnYXRpb24gZXJyb3JcbiAgICAgICAgICAgIGlmIChldi51cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBoYWNraXNoOiB3ZSBoYXJkY29kZSBhbiBpbXBvc3NpYmxlIHVybCB0byB0cmlnZ2VyIG5vcm1hbCBuYXZpZ2F0aW9uIGVycm9yIG1lY2hhbmlzbVxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ3BhbmVscy1yZWFjaGVkLWludmFsaWQtdXJsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY291bnRlcisrO1xuXG4gICAgICAgICAgICAvLyBwYyBzdGFuZHMgZm9yIFwicGFuZWwgY291bnRlclwiLCByZXF1aXJlZCB0byBnaXZlIGFuIGlkZW50aWZpY2F0aW9uIHRvIHBhbmVscyB3aXRoIGV4YWN0IHNhbWUgY29uZmlnXG4gICAgICAgICAgICAvLyBFLmcgL25ld1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkVXJsID0gZXYudXJsICsgJztwYz0nICsgdGhpcy5jb3VudGVyO1xuXG4gICAgICAgICAgICAvLyBTZWdtZW50cyBtYXRjaGluZyBmcm9tIHdhbnRlZCB1cmwuIEUuZyB+IFsnbmV3J11cbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVyU2VnbWVudHMgPSBuZXcgRGVmYXVsdFVybFNlcmlhbGl6ZXIoKS5wYXJzZSh3YW50ZWRVcmwpLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cztcblxuICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggYW55IGNvbmZpZ1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcod2FudGVkVXJTZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAod2FudGVkQ29uZmlnLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybCh3YW50ZWRDb25maWcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdXJyZW50bHkgYWN0aXZhdGVkIHJvdXRlcy4gRS5nIFsnb2JqZWN0aXZlJywgJ29iamVjdGl2ZScsIDEyMywgJ3Jpc2snXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlZ21lbnRzID0gZmxhdHRlbihcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5tYXAoZCA9PiBkLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTGFzdCBzZWdtZW50LiBFLmcgWydyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGxhc3RPZkN1cnJlbnRTZWdtZW50cyA9IGN1cnJlbnRTZWdtZW50cy5zbGljZSgtMSk7XG5cbiAgICAgICAgICAgIC8vIENvbmZpZyBmb3IgWydyaXNrJywgJ25ldyddXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QW5kV2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoXG4gICAgICAgICAgICAgICAgbGFzdE9mQ3VycmVudFNlZ21lbnRzLmNvbmNhdCh3YW50ZWRVclNlZ21lbnRzKSxcbiAgICAgICAgICAgICAgICByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKGN1cnJlbnRBbmRXYW50ZWRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGdpdmVuIGNvbmZpZ3VyYXRpb24gdG8gYWRkIGluIHRoZSBlbmQgb2YgY3VycmVudCB1cmxcbiAgICAgKiBOZXV0cmFsaXplcyByb3V0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3JIYW5kbGVyID0gdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyO1xuXG4gICAgICAgIC8vIE51bGxpZnkgZXJyb3IgaGFuZGxlciAod2lsbCBiZSBkZS1uZXV0cmFsaXplZCBhZnRlciByb3V0ZSByZWRpcmVjdGlvbilcbiAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gKCkgPT4ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byBzYW1lIHVybCArIC9yaXNrL25ldyBSZXN1bHQgOiAvcmlzay9yaXNrL25ld1xuICAgICAgICBjb25zdCBuZXdVcmwgPSBjb25maWcubWFwKGNvbmYgPT4gc2VnbWVudHNUb1N0cmluZyhjb25mLnJvdXRlLnNlZ21lbnRzKSkuam9pbignLycpO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsICsgJy8nICsgbmV3VXJsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEFmdGVyIG5hdmlnYXRpb24gaGFzIGVuZGVkLCByZXN0b3JlIG9yaWdpbmFsIGVycm9yIGhhbmRsZXIgYmVjYXVzZSBoZSdzIG5vdCBhIGJhZCBndXlcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9IG9yaWdpbmFsRXJyb3JIYW5kbGVyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcbiAgICAgICAgTmF0dXJhbFBhbmVsc1NlcnZpY2UuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm5hdlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuYWZ0ZXJBbGxDbG9zZWQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QYW5lbEJ5Q29tcG9uZW50KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZ2V0UGFuZWxJbmRleChjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbyB0byBwYW5lbCBtYXRjaGluZyBnaXZlbiBjb21wb25lbnQuIENhdXNlcyBhbiB1cmwgY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGVudWx0aW1hdGVQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBuZXcgdXJsIHRoYXQgb25seSBpbmNsdWRlcyB0aGUgc2VnbWVudHMgZnJvbSB0aGUgcGFuZWxzIHdlIHdhbnQgdG8gc3RheSBvcGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvUGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gRXh0cmFjdHMgdXJsIHNlZ21lbnRzIGZyb20gbmV4dCBwYW5lbCB1bnRpbCBsYXN0IG9uZVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1xuICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgIC5tYXAoZGlhbG9nID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudHNUb1N0cmluZyhkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxEYXRhLmNvbmZpZy5yb3V0ZS5zZWdtZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgICAvLyBSZW1vdmUgZXh0cmEgc2VnbWVudHMgYW5kIHJlZGlyZWN0cyB0byByb290XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoJy8nICsgdXJsLCAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGluZyBhIHBhbmVsIGlzIGVxdWl2YWxlbnQgdG8gY2xvc2UgYWxsIHRob3NlIHRoYXQgYXJlIGluIGZyb250IG9mIGhpbVxuICAgICAqIEBwYXJhbSBpbmRleCBvZiBwYW5lbCBpbiBzdGFjay4gVGhlIG1vc3QgYmVoaW5kICh0aGUgZmlyc3Qgb25lKSBpcyAwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbGFzdERpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBuZXcgcGFuZWxzIHNldCBwb3NpdGlvbnNcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMTsgaSA+PSBpbmRleCArIDE7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbaV0uY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXN0RGlhbG9nLmFmdGVyQ2xvc2VkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBuZXcgcGFuZWxzIGlmIHVybCBoYXMgY2hhbmdlZCB3aXRoIG5ldyBzZWdtZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlUGFuZWxzKHNlZ21lbnRzOiBVcmxTZWdtZW50W10sIHJvdXRlczogTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGVbXSk6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdXJsIHNlZ21lbnRzIGludG8gYSBjb25maWcgd2l0aCBjb21wb25lbnQgbmFtZSBhbmQgSUQgaWYgcHJvdmlkZWQgaW4gbmV4dCBzZWdtZW50XG4gICAgICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgY29uZmlncywgZWFjaCBjb25maWcgcmVwcmVzZW50cyB0aGUgY29udGVudCByZWxhdGl2ZSB0byBhIHBhbmVsXG4gICAgICAgIGNvbnN0IG5ld0Z1bGxDb25maWcgPSBnZXRTdGFja0NvbmZpZyhzZWdtZW50cywgcm91dGVzLCB0aGlzLmluamVjdG9yKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvUmVtb3ZlID0gZGlmZmVyZW5jZVdpdGgodGhpcy5vbGRGdWxsQ29uZmlnLCBuZXdGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb0FkZCA9IGRpZmZlcmVuY2VXaXRoKG5ld0Z1bGxDb25maWcsIHRoaXMub2xkRnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXh0UGFuZWwgPSB0aGlzLm9sZEZ1bGxDb25maWcubGVuZ3RoIC0gY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gQWRkIGFuZCByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgIWNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgYWRkIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gbmV3RnVsbENvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIGFsbCBzZXJ2aWNlcywgdGhlbiBvcGVuIHBhbmVsc1xuICAgICAqL1xuICAgIHByaXZhdGUgb3BlblBhbmVscyhcbiAgICAgICAgbmV3SXRlbXNDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICAgICBmdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICApOiBPYnNlcnZhYmxlPE9ic2VydmFibGU8YW55PiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PE9ic2VydmFibGU8YW55PiB8IG51bGw+KCk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBldmVyeXRoaW5nIGJlZm9yZSBvcGVuaW5nIGEgc2luZ2xlIHBhbmVsXG4gICAgICAgIGNvbnN0IHJlc29sdmVzID0gbmV3SXRlbXNDb25maWcubWFwKChjb25mOiBOYXR1cmFsUGFuZWxDb25maWcpID0+IHRoaXMuZ2V0UmVzb2x2ZWREYXRhKGNvbmYpKTtcblxuICAgICAgICAvLyBGb3JrSm9pbiBlbWl0cyB3aGVuIGFsbCBwcm9taXNlcyBhcmUgZXhlY3V0ZWQ7XG4gICAgICAgIGZvcmtKb2luKHJlc29sdmVzKS5zdWJzY3JpYmUocmVzb2x2ZWRSZXN1bHQgPT4ge1xuICAgICAgICAgICAgLy8gRm9yIGVhY2ggbmV3IGNvbmZpZyBlbnRyeSwgb3BlbiBhIG5ldyBwYW5lbFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJdGVtc0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ld0l0ZW1zQ29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRGF0YTogTmF0dXJhbFBhbmVsRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIG9mIGFjdHVhbCBwYW5lbCByb3V0ZVxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcblxuICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIHJlc29sdmVkIGJ5IHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGluIGNvbXBvbmVudCBieSBjYWxsaW5nIHRoaXMucGFuZWxEYXRhLmRhdGEueHl6XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc29sdmVkUmVzdWx0W2ldLFxuICAgICAgICAgICAgICAgICAgICBsaW5rYWJsZU9iamVjdHM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob29rc0NvbmZpZyAmJiB0aGlzLmhvb2tzQ29uZmlnLmJlZm9yZU9wZW5QYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlc3VsdDogcmVzb2x2ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFuZWxzQ29uZmlnOiBmdWxsQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhID0gdGhpcy5ob29rc0NvbmZpZy5iZWZvcmVPcGVuUGFuZWwodGhpcy5pbmplY3RvciwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKGNvbmZpZy5jb21wb25lbnQsIGl0ZW1EYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV0uYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc29sdmVkRGF0YShjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZyk6IE9ic2VydmFibGU8e1trZXk6IHN0cmluZ106IHVua25vd259PiB7XG4gICAgICAgIGlmICghY29uZmlnLnJlc29sdmUgfHwgKGNvbmZpZy5yZXNvbHZlICYmIE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZUtleXMgPSBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YToge1trZXk6IHN0cmluZ106IE9ic2VydmFibGU8dW5rbm93bj59ID0ge307XG4gICAgICAgIHJlc29sdmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkRGF0YVtrZXldID0gY29uZmlnLnJlc29sdmVba2V5XS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihyZXNvbHZlZERhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCBhcyBhbnkpLm1vZGVsIHx8IHJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsPFQ+KGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8TmF0dXJhbEFic3RyYWN0UGFuZWw+LCBkYXRhOiBOYXR1cmFsUGFuZWxEYXRhKTogYW55IHtcbiAgICAgICAgY29uc3QgY29uZjogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5wYW5lbENsYXNzLFxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6ICc5NjBweCcsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48TmF0dXJhbEFic3RyYWN0UGFuZWw+KGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGNvbmYpO1xuXG4gICAgICAgIC8vIFBhbmVsaXNhYmxlIGludGVyZmFjZSBhdHRyaWJ1dGVzL2Z1bmN0aW9uc1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5pdFBhbmVsKGRhdGEpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFBhbmVsSW5kZXgoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleChpbmRleCAtIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gcGFuZWwgcG9zaXRpb24gKGluZGV4KSBieSBzZWFyY2hpbmcgbWF0Y2hpbmcgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmZpbmRJbmRleChkaWFsb2cgPT4gZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlID09PSBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRpb25zIHBhbmVscyBmcm9tIHN0YXJ0IHVudGlsIGdpdmVuIGluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIHBhbmVscyB0aGF0IGFyZSBzdGlsbCBvcGVuZWQsIGlnbm9yZSB0aGUgb3RoZXJzIGJlY2F1c2UgdGhleSdsbCBiZSBjbG9zZWRcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRFbGVtZW50cyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gYWZmZWN0ZWRFbGVtZW50c1tpXTtcblxuICAgICAgICAgICAgLy8gU2V0IGFsbCBwYW5lbHMgYXMgXCJoaWRkZW5cIiBleGNlcHQgbGFzdCBvbmUuIElzRnJvbnRQYW5lbCBhdHRyaWJ1dGUgY2F1c2VzIGEgQ1NTIHRoYXQgaGlkZXMgYm9keSB2aWEgaG9zdGJpbmRpbmdcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5pc0Zyb250UGFuZWwgPSBpID09PSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxTZXJ2aWNlID0gdGhpcztcblxuICAgICAgICAgICAgLy8gQXNzaWduIG9mZnNldFxuICAgICAgICAgICAgY29uc3QgZGVlcCA9IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMSAtIGk7XG5cbiAgICAgICAgICAgIGxldCBwb3NpdGlvbjogYW55ID0ge3JpZ2h0OiBkZWVwICogdGhpcy5wYW5lbHNPZmZzZXRIICsgJ3B4J307XG4gICAgICAgICAgICBpZiAodGhpcy5tZWRpYSA9PT0gJ3hzJyAmJiBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBpICogdGhpcy5wYW5lbHNPZmZzZXRWICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICcwcHgnLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpYWxvZy51cGRhdGVQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|