@colijnit/corecomponents_v12 261.1.1 → 261.20.1
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/{fesm2015/colijnit-corecomponents_v12.js → fesm2022/colijnit-corecomponents_v12.mjs} +20197 -15310
- package/fesm2022/colijnit-corecomponents_v12.mjs.map +1 -0
- package/index.d.ts +3985 -0
- package/lib/components/popup/popup-message-display.component.scss +0 -2
- package/lib/components/scroll-container/style/_layout.scss +68 -0
- package/lib/components/scroll-container/style/_material-definition.scss +0 -0
- package/lib/components/scroll-container/style/_theme.scss +4 -0
- package/lib/components/scroll-container/style/material.scss +4 -0
- package/package.json +17 -13
- package/bundles/colijnit-corecomponents_v12.umd.js +0 -16057
- package/bundles/colijnit-corecomponents_v12.umd.js.map +0 -1
- package/colijnit-corecomponents_v12-261.1.0.tgz +0 -0
- package/colijnit-corecomponents_v12.d.ts +0 -45
- package/colijnit-corecomponents_v12.metadata.json +0 -1
- package/esm2015/colijnit-corecomponents_v12.js +0 -46
- package/esm2015/lib/components/article-tile/article-tile.component.js +0 -81
- package/esm2015/lib/components/article-tile/article-tile.module.js +0 -35
- package/esm2015/lib/components/base/base-input.component.js +0 -849
- package/esm2015/lib/components/base/base.module.js +0 -22
- package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +0 -103
- package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +0 -21
- package/esm2015/lib/components/base/dialog-base.component.js +0 -6
- package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +0 -25
- package/esm2015/lib/components/base-input-time/base-input-time-directive.js +0 -25
- package/esm2015/lib/components/button/button.component.js +0 -79
- package/esm2015/lib/components/button/button.module.js +0 -19
- package/esm2015/lib/components/calendar/calendar-template.component.js +0 -404
- package/esm2015/lib/components/calendar/calendar.component.js +0 -46
- package/esm2015/lib/components/calendar/calendar.module.js +0 -30
- package/esm2015/lib/components/card/card.component.js +0 -72
- package/esm2015/lib/components/card/card.module.js +0 -35
- package/esm2015/lib/components/carousel/carousel.component.js +0 -130
- package/esm2015/lib/components/carousel/carousel.module.js +0 -32
- package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +0 -315
- package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +0 -19
- package/esm2015/lib/components/carousel-3d/carouselItem.js +0 -54
- package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +0 -87
- package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +0 -19
- package/esm2015/lib/components/co-dialog/co-dialog.component.js +0 -113
- package/esm2015/lib/components/co-dialog/co-dialog.module.js +0 -19
- package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +0 -51
- package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +0 -17
- package/esm2015/lib/components/collapsible/collapsible.component.js +0 -92
- package/esm2015/lib/components/collapsible/collapsible.module.js +0 -19
- package/esm2015/lib/components/color-picker/color-picker.component.js +0 -41
- package/esm2015/lib/components/color-picker/color-picker.module.js +0 -21
- package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +0 -79
- package/esm2015/lib/components/core-dialog/core-dialog.module.js +0 -39
- package/esm2015/lib/components/core-dialog/core-dialog.service.js +0 -67
- package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +0 -93
- package/esm2015/lib/components/double-calendar/double-calendar.component.js +0 -112
- package/esm2015/lib/components/double-calendar/double-calendar.module.js +0 -25
- package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +0 -13
- package/esm2015/lib/components/filter-item/filter-item.component.js +0 -1019
- package/esm2015/lib/components/filter-item/filter-item.module.js +0 -43
- package/esm2015/lib/components/filter-item/filter-viewmodel.js +0 -11
- package/esm2015/lib/components/form/form.component.js +0 -184
- package/esm2015/lib/components/form/form.module.js +0 -23
- package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +0 -57
- package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +0 -23
- package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +0 -28
- package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +0 -19
- package/esm2015/lib/components/hour-scheduling/components/hour-scheduling-test-object/hour-scheduling-test-object.component.js +0 -22
- package/esm2015/lib/components/hour-scheduling/hour-scheduling.component.js +0 -276
- package/esm2015/lib/components/hour-scheduling/hour-scheduling.module.js +0 -23
- package/esm2015/lib/components/hour-scheduling/model/enum/scheduling-object.interface.js +0 -2
- package/esm2015/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.component.js +0 -111
- package/esm2015/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.module.js +0 -20
- package/esm2015/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.component.js +0 -337
- package/esm2015/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.module.js +0 -24
- package/esm2015/lib/components/icon/icon-cache.service.js +0 -52
- package/esm2015/lib/components/icon/icon.component.js +0 -48
- package/esm2015/lib/components/icon/icon.module.js +0 -25
- package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +0 -64
- package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +0 -23
- package/esm2015/lib/components/image/image.component.js +0 -42
- package/esm2015/lib/components/image/image.module.js +0 -14
- package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +0 -79
- package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +0 -19
- package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +0 -145
- package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +0 -28
- package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +0 -178
- package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +0 -27
- package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +0 -320
- package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +0 -23
- package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +0 -84
- package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +0 -19
- package/esm2015/lib/components/input-scanner/bar-code-scanner.js +0 -36
- package/esm2015/lib/components/input-scanner/input-scanner.component.js +0 -94
- package/esm2015/lib/components/input-scanner/input-scanner.module.js +0 -21
- package/esm2015/lib/components/input-scanner/scanner.service.js +0 -28
- package/esm2015/lib/components/input-search/input-search.component.js +0 -92
- package/esm2015/lib/components/input-search/input-search.module.js +0 -21
- package/esm2015/lib/components/input-text/input-text.component.js +0 -381
- package/esm2015/lib/components/input-text/input-text.module.js +0 -33
- package/esm2015/lib/components/input-textarea/input-textarea.component.js +0 -78
- package/esm2015/lib/components/input-textarea/input-textarea.module.js +0 -27
- package/esm2015/lib/components/input-time/input-time.component.js +0 -74
- package/esm2015/lib/components/input-time/input-time.module.js +0 -24
- package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +0 -7
- package/esm2015/lib/components/level-indicator/level-indicator.component.js +0 -36
- package/esm2015/lib/components/level-indicator/level-indicator.module.js +0 -15
- package/esm2015/lib/components/list-of-icons/list-of-icons.component.js +0 -98
- package/esm2015/lib/components/list-of-icons/list-of-icons.module.js +0 -27
- package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +0 -112
- package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +0 -321
- package/esm2015/lib/components/list-of-values/list-of-values.component.js +0 -344
- package/esm2015/lib/components/list-of-values/list-of-values.module.js +0 -39
- package/esm2015/lib/components/loader/loader.component.js +0 -84
- package/esm2015/lib/components/loader/loader.module.js +0 -19
- package/esm2015/lib/components/pagination/paginate.pipe.js +0 -99
- package/esm2015/lib/components/pagination/pagination-instance.js +0 -2
- package/esm2015/lib/components/pagination/pagination.component.js +0 -126
- package/esm2015/lib/components/pagination/pagination.module.js +0 -28
- package/esm2015/lib/components/pagination/pagination.service.js +0 -88
- package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +0 -151
- package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +0 -19
- package/esm2015/lib/components/popup/const/popup-window-token.js +0 -3
- package/esm2015/lib/components/popup/interface/popup-button.js +0 -8
- package/esm2015/lib/components/popup/interface/popup-close-event.js +0 -2
- package/esm2015/lib/components/popup/interface/popup-settings.js +0 -42
- package/esm2015/lib/components/popup/interface/popup.js +0 -2
- package/esm2015/lib/components/popup/model/popup-button-globals.js +0 -11
- package/esm2015/lib/components/popup/model/popup-window.js +0 -38
- package/esm2015/lib/components/popup/popup-buttons.component.js +0 -53
- package/esm2015/lib/components/popup/popup-message-display.component.js +0 -48
- package/esm2015/lib/components/popup/popup-window-shell.component.js +0 -159
- package/esm2015/lib/components/popup/popup.module.js +0 -49
- package/esm2015/lib/components/popup/service/popup-shower.service.js +0 -90
- package/esm2015/lib/components/popup/service/prompt.service.js +0 -127
- package/esm2015/lib/components/popup/text-input-popup.component.js +0 -36
- package/esm2015/lib/components/responsive-text/responsive-text.component.js +0 -24
- package/esm2015/lib/components/responsive-text/responsive-text.module.js +0 -19
- package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +0 -193
- package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +0 -172
- package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +0 -113
- package/esm2015/lib/components/simple-grid/simple-grid.component.js +0 -773
- package/esm2015/lib/components/simple-grid/simple-grid.module.js +0 -47
- package/esm2015/lib/components/tile/tile.component.js +0 -73
- package/esm2015/lib/components/tile/tile.module.js +0 -23
- package/esm2015/lib/components/tile-select/tile-select.component.js +0 -36
- package/esm2015/lib/components/tile-select/tile-select.module.js +0 -21
- package/esm2015/lib/components/tooltip/tooltip.component.js +0 -95
- package/esm2015/lib/components/tooltip/tooltip.module.js +0 -19
- package/esm2015/lib/components/validation-error/validation-error.component.js +0 -38
- package/esm2015/lib/components/validation-error/validation-error.module.js +0 -25
- package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +0 -11
- package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +0 -64
- package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +0 -21
- package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +0 -4
- package/esm2015/lib/core/constant/java-max-int.js +0 -2
- package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +0 -45
- package/esm2015/lib/core/decorator/input-boolean.decorator.js +0 -34
- package/esm2015/lib/core/enum/co-direction.js +0 -9
- package/esm2015/lib/core/enum/co-document-type.enum.js +0 -11
- package/esm2015/lib/core/enum/co-orientation.js +0 -17
- package/esm2015/lib/core/enum/core-components-icon.enum.js +0 -307
- package/esm2015/lib/core/enum/file-type-internal.enum.js +0 -17
- package/esm2015/lib/core/enum/file-type.enum.js +0 -11
- package/esm2015/lib/core/enum/filterItem-mode.enum.js +0 -49
- package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +0 -8
- package/esm2015/lib/core/enum/keyboard-code.enum.js +0 -74
- package/esm2015/lib/core/enum/keyboard-key.enum.js +0 -76
- package/esm2015/lib/core/enum/popup-button-type.enum.js +0 -12
- package/esm2015/lib/core/enum/popup-type.enum.js +0 -11
- package/esm2015/lib/core/function/any-nill.function.js +0 -6
- package/esm2015/lib/core/function/is-nill.function.js +0 -5
- package/esm2015/lib/core/function/none-nill.function.js +0 -17
- package/esm2015/lib/core/function/not-nill.function.js +0 -5
- package/esm2015/lib/core/model/bounds-constrained-number-value.js +0 -171
- package/esm2015/lib/core/model/check-precision-and-scale-result.js +0 -2
- package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +0 -2
- package/esm2015/lib/core/model/core-components-icon-svg.js +0 -306
- package/esm2015/lib/core/model/element-position.js +0 -10
- package/esm2015/lib/core/model/event/string-prompt-result-event.js +0 -8
- package/esm2015/lib/core/service/form-input-user-change-listener.service.js +0 -25
- package/esm2015/lib/core/service/form-master.service.js +0 -102
- package/esm2015/lib/core/service/ng-zone-wrapper.service.js +0 -20
- package/esm2015/lib/core/utils/array-utils.js +0 -264
- package/esm2015/lib/core/utils/browser-utils.js +0 -100
- package/esm2015/lib/core/utils/direction-enum-utils.js +0 -14
- package/esm2015/lib/core/utils/event-utils.js +0 -53
- package/esm2015/lib/core/utils/file-utils.js +0 -267
- package/esm2015/lib/core/utils/number-utils.js +0 -309
- package/esm2015/lib/core/utils/object-utils.js +0 -186
- package/esm2015/lib/core/utils/string-utils.js +0 -94
- package/esm2015/lib/core/validator/email.validator.js +0 -6
- package/esm2015/lib/core/validator/equal.validator.js +0 -11
- package/esm2015/lib/core/validator/max-string-length.validator.js +0 -10
- package/esm2015/lib/core/validator/password.validator.js +0 -31
- package/esm2015/lib/core/validator/precision-scale.validator.js +0 -11
- package/esm2015/lib/core/validator/required.validator.js +0 -5
- package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +0 -57
- package/esm2015/lib/directives/clickoutside/click-outside.directive.js +0 -71
- package/esm2015/lib/directives/clickoutside/clickoutside.module.js +0 -19
- package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +0 -53
- package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +0 -15
- package/esm2015/lib/directives/overlay/overlay-parent.directive.js +0 -19
- package/esm2015/lib/directives/overlay/overlay.directive.js +0 -161
- package/esm2015/lib/directives/overlay/overlay.module.js +0 -18
- package/esm2015/lib/directives/ripple/ripple-ref.js +0 -26
- package/esm2015/lib/directives/ripple/ripple-renderer.js +0 -160
- package/esm2015/lib/directives/ripple/ripple.directive.js +0 -80
- package/esm2015/lib/directives/ripple/ripple.module.js +0 -24
- package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +0 -108
- package/esm2015/lib/directives/ripple/scrollable.directive.js +0 -40
- package/esm2015/lib/directives/ripple/viewport-ruler.service.js +0 -73
- package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +0 -159
- package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +0 -19
- package/esm2015/lib/directives/stopclick/stop-click.directive.js +0 -38
- package/esm2015/lib/directives/stopclick/stop-click.module.js +0 -15
- package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +0 -68
- package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +0 -15
- package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +0 -19
- package/esm2015/lib/directives/tooltip/tooltip.directive.js +0 -78
- package/esm2015/lib/interfaces/dialog-response.interface.js +0 -2
- package/esm2015/lib/interfaces/scanner-input.interface.js +0 -2
- package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +0 -4
- package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +0 -2
- package/esm2015/lib/model/enum/app-button-type.enum.js +0 -11
- package/esm2015/lib/model/enum/app-popup-type.enum.js +0 -8
- package/esm2015/lib/model/icon-list-item.js +0 -2
- package/esm2015/lib/pipes/append.pipe.js +0 -17
- package/esm2015/lib/pipes/append.pipe.module.js +0 -15
- package/esm2015/lib/pipes/filter.pipe.js +0 -16
- package/esm2015/lib/pipes/filter.pipe.module.js +0 -15
- package/esm2015/lib/pipes/prepend.pipe.js +0 -17
- package/esm2015/lib/pipes/prepend.pipe.module.js +0 -15
- package/esm2015/lib/pipes/price-display-pipe.module.js +0 -15
- package/esm2015/lib/pipes/price-display.pipe.js +0 -20
- package/esm2015/lib/service/base-module-screen-config.service.js +0 -205
- package/esm2015/lib/service/base-module.service.js +0 -42
- package/esm2015/lib/service/color-sequence.service.js +0 -49
- package/esm2015/lib/service/excel-export.service.js +0 -128
- package/esm2015/lib/service/overlay.service.js +0 -75
- package/esm2015/lib/translation/core-components-translation.module.js +0 -26
- package/esm2015/lib/translation/core-components-translation.service.js +0 -17
- package/esm2015/lib/translation/core-dictionary.service.js +0 -29
- package/esm2015/lib/translation/core-localize.pipe.js +0 -26
- package/esm2015/public-api.js +0 -142
- package/fesm2015/colijnit-corecomponents_v12.js.map +0 -1
- package/lib/components/article-tile/article-tile.component.d.ts +0 -22
- package/lib/components/article-tile/article-tile.module.d.ts +0 -2
- package/lib/components/base/base-input.component.d.ts +0 -189
- package/lib/components/base/base.module.d.ts +0 -2
- package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +0 -21
- package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +0 -2
- package/lib/components/base/dialog-base.component.d.ts +0 -4
- package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +0 -15
- package/lib/components/base-input-time/base-input-time-directive.d.ts +0 -14
- package/lib/components/button/button.component.d.ts +0 -31
- package/lib/components/button/button.module.d.ts +0 -2
- package/lib/components/calendar/calendar-template.component.d.ts +0 -70
- package/lib/components/calendar/calendar.component.d.ts +0 -13
- package/lib/components/calendar/calendar.module.d.ts +0 -2
- package/lib/components/card/card.component.d.ts +0 -23
- package/lib/components/card/card.module.d.ts +0 -2
- package/lib/components/carousel/carousel.component.d.ts +0 -23
- package/lib/components/carousel/carousel.module.d.ts +0 -6
- package/lib/components/carousel-3d/carousel-3d.component.d.ts +0 -55
- package/lib/components/carousel-3d/carousel-3d.module.d.ts +0 -2
- package/lib/components/carousel-3d/carouselItem.d.ts +0 -13
- package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +0 -17
- package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +0 -2
- package/lib/components/co-dialog/co-dialog.component.d.ts +0 -23
- package/lib/components/co-dialog/co-dialog.module.d.ts +0 -2
- package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +0 -9
- package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +0 -2
- package/lib/components/collapsible/collapsible.component.d.ts +0 -22
- package/lib/components/collapsible/collapsible.module.d.ts +0 -2
- package/lib/components/color-picker/color-picker.component.d.ts +0 -6
- package/lib/components/color-picker/color-picker.module.d.ts +0 -2
- package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +0 -20
- package/lib/components/core-dialog/core-dialog.module.d.ts +0 -4
- package/lib/components/core-dialog/core-dialog.service.d.ts +0 -15
- package/lib/components/core-dialog/core-dynamic-component.service.d.ts +0 -12
- package/lib/components/double-calendar/double-calendar.component.d.ts +0 -20
- package/lib/components/double-calendar/double-calendar.module.d.ts +0 -2
- package/lib/components/filter-item/filter-item-viewmodel.d.ts +0 -9
- package/lib/components/filter-item/filter-item.component.d.ts +0 -126
- package/lib/components/filter-item/filter-item.module.d.ts +0 -2
- package/lib/components/filter-item/filter-viewmodel.d.ts +0 -8
- package/lib/components/form/form.component.d.ts +0 -39
- package/lib/components/form/form.module.d.ts +0 -2
- package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +0 -19
- package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +0 -2
- package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +0 -8
- package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +0 -2
- package/lib/components/hour-scheduling/components/hour-scheduling-test-object/hour-scheduling-test-object.component.d.ts +0 -5
- package/lib/components/hour-scheduling/hour-scheduling.component.d.ts +0 -48
- package/lib/components/hour-scheduling/hour-scheduling.module.d.ts +0 -2
- package/lib/components/hour-scheduling/model/enum/scheduling-object.interface.d.ts +0 -10
- package/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.component.d.ts +0 -23
- package/lib/components/hour-scheduling-expandable/components/hour-scheduling-expandable-template/hour-scheduling-expandable-template.module.d.ts +0 -2
- package/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.component.d.ts +0 -78
- package/lib/components/hour-scheduling-expandable/hour-scheduling-expandable.module.d.ts +0 -2
- package/lib/components/icon/icon-cache.service.d.ts +0 -20
- package/lib/components/icon/icon.component.d.ts +0 -17
- package/lib/components/icon/icon.module.d.ts +0 -2
- package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +0 -21
- package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +0 -2
- package/lib/components/image/image.component.d.ts +0 -20
- package/lib/components/image/image.module.d.ts +0 -2
- package/lib/components/input-checkbox/input-checkbox.component.d.ts +0 -24
- package/lib/components/input-checkbox/input-checkbox.module.d.ts +0 -2
- package/lib/components/input-date-picker/input-date-picker.component.d.ts +0 -30
- package/lib/components/input-date-picker/input-date-picker.module.d.ts +0 -2
- package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +0 -27
- package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +0 -2
- package/lib/components/input-number-picker/input-number-picker.component.d.ts +0 -74
- package/lib/components/input-number-picker/input-number-picker.module.d.ts +0 -2
- package/lib/components/input-radio-button/input-radio-button.component.d.ts +0 -19
- package/lib/components/input-radio-button/input-radio-button.module.d.ts +0 -2
- package/lib/components/input-scanner/bar-code-scanner.d.ts +0 -10
- package/lib/components/input-scanner/input-scanner.component.d.ts +0 -29
- package/lib/components/input-scanner/input-scanner.module.d.ts +0 -2
- package/lib/components/input-scanner/scanner.service.d.ts +0 -11
- package/lib/components/input-search/input-search.component.d.ts +0 -22
- package/lib/components/input-search/input-search.module.d.ts +0 -2
- package/lib/components/input-text/input-text.component.d.ts +0 -78
- package/lib/components/input-text/input-text.module.d.ts +0 -2
- package/lib/components/input-textarea/input-textarea.component.d.ts +0 -19
- package/lib/components/input-textarea/input-textarea.module.d.ts +0 -2
- package/lib/components/input-time/input-time.component.d.ts +0 -8
- package/lib/components/input-time/input-time.module.d.ts +0 -2
- package/lib/components/level-indicator/level-indicator-level.enum.d.ts +0 -5
- package/lib/components/level-indicator/level-indicator.component.d.ts +0 -10
- package/lib/components/level-indicator/level-indicator.module.d.ts +0 -2
- package/lib/components/list-of-icons/list-of-icons.component.d.ts +0 -22
- package/lib/components/list-of-icons/list-of-icons.module.d.ts +0 -2
- package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +0 -25
- package/lib/components/list-of-values/list-of-values-popup.component.d.ts +0 -58
- package/lib/components/list-of-values/list-of-values.component.d.ts +0 -63
- package/lib/components/list-of-values/list-of-values.module.d.ts +0 -2
- package/lib/components/loader/loader.component.d.ts +0 -3
- package/lib/components/loader/loader.module.d.ts +0 -2
- package/lib/components/pagination/paginate.pipe.d.ts +0 -15
- package/lib/components/pagination/pagination-instance.d.ts +0 -14
- package/lib/components/pagination/pagination.component.d.ts +0 -38
- package/lib/components/pagination/pagination.module.d.ts +0 -2
- package/lib/components/pagination/pagination.service.d.ts +0 -24
- package/lib/components/pagination-bar/pagination-bar.component.d.ts +0 -33
- package/lib/components/pagination-bar/pagination-bar.module.d.ts +0 -2
- package/lib/components/popup/const/popup-window-token.d.ts +0 -3
- package/lib/components/popup/interface/popup-button.d.ts +0 -8
- package/lib/components/popup/interface/popup-close-event.d.ts +0 -5
- package/lib/components/popup/interface/popup-settings.d.ts +0 -21
- package/lib/components/popup/interface/popup.d.ts +0 -9
- package/lib/components/popup/model/popup-button-globals.d.ts +0 -9
- package/lib/components/popup/model/popup-window.d.ts +0 -21
- package/lib/components/popup/popup-buttons.component.d.ts +0 -13
- package/lib/components/popup/popup-message-display.component.d.ts +0 -12
- package/lib/components/popup/popup-window-shell.component.d.ts +0 -42
- package/lib/components/popup/popup.module.d.ts +0 -4
- package/lib/components/popup/service/popup-shower.service.d.ts +0 -17
- package/lib/components/popup/service/prompt.service.d.ts +0 -17
- package/lib/components/popup/text-input-popup.component.d.ts +0 -12
- package/lib/components/responsive-text/responsive-text.component.d.ts +0 -4
- package/lib/components/responsive-text/responsive-text.module.d.ts +0 -2
- package/lib/components/simple-grid/base-simple-grid.component.d.ts +0 -59
- package/lib/components/simple-grid/simple-grid-cell.component.d.ts +0 -30
- package/lib/components/simple-grid/simple-grid-column.directive.d.ts +0 -43
- package/lib/components/simple-grid/simple-grid.component.d.ts +0 -87
- package/lib/components/simple-grid/simple-grid.module.d.ts +0 -2
- package/lib/components/tile/tile.component.d.ts +0 -16
- package/lib/components/tile/tile.module.d.ts +0 -2
- package/lib/components/tile-select/tile-select.component.d.ts +0 -8
- package/lib/components/tile-select/tile-select.module.d.ts +0 -2
- package/lib/components/tooltip/tooltip.component.d.ts +0 -23
- package/lib/components/tooltip/tooltip.module.d.ts +0 -2
- package/lib/components/validation-error/validation-error.component.d.ts +0 -12
- package/lib/components/validation-error/validation-error.module.d.ts +0 -2
- package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +0 -8
- package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +0 -17
- package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +0 -2
- package/lib/core/constant/default-upper-bound-for-range-components.d.ts +0 -2
- package/lib/core/constant/java-max-int.d.ts +0 -1
- package/lib/core/constant/number-inputs-key-down-white-list.d.ts +0 -2
- package/lib/core/decorator/input-boolean.decorator.d.ts +0 -8
- package/lib/core/enum/co-direction.d.ts +0 -6
- package/lib/core/enum/co-document-type.enum.d.ts +0 -5
- package/lib/core/enum/co-orientation.d.ts +0 -6
- package/lib/core/enum/core-components-icon.enum.d.ts +0 -305
- package/lib/core/enum/file-type-internal.enum.d.ts +0 -15
- package/lib/core/enum/file-type.enum.d.ts +0 -5
- package/lib/core/enum/filterItem-mode.enum.d.ts +0 -17
- package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +0 -5
- package/lib/core/enum/keyboard-code.enum.d.ts +0 -71
- package/lib/core/enum/keyboard-key.enum.d.ts +0 -70
- package/lib/core/enum/popup-button-type.enum.d.ts +0 -9
- package/lib/core/enum/popup-type.enum.d.ts +0 -9
- package/lib/core/function/any-nill.function.d.ts +0 -1
- package/lib/core/function/is-nill.function.d.ts +0 -1
- package/lib/core/function/none-nill.function.d.ts +0 -1
- package/lib/core/function/not-nill.function.d.ts +0 -1
- package/lib/core/model/bounds-constrained-number-value.d.ts +0 -46
- package/lib/core/model/check-precision-and-scale-result.d.ts +0 -4
- package/lib/core/model/check-within-stepped-bounds-result.d.ts +0 -8
- package/lib/core/model/core-components-icon-svg.d.ts +0 -4
- package/lib/core/model/element-position.d.ts +0 -7
- package/lib/core/model/event/string-prompt-result-event.d.ts +0 -6
- package/lib/core/service/form-input-user-change-listener.service.d.ts +0 -10
- package/lib/core/service/form-master.service.d.ts +0 -26
- package/lib/core/service/ng-zone-wrapper.service.d.ts +0 -6
- package/lib/core/utils/array-utils.d.ts +0 -85
- package/lib/core/utils/browser-utils.d.ts +0 -15
- package/lib/core/utils/direction-enum-utils.d.ts +0 -5
- package/lib/core/utils/event-utils.d.ts +0 -12
- package/lib/core/utils/file-utils.d.ts +0 -29
- package/lib/core/utils/number-utils.d.ts +0 -89
- package/lib/core/utils/object-utils.d.ts +0 -31
- package/lib/core/utils/string-utils.d.ts +0 -25
- package/lib/core/validator/email.validator.d.ts +0 -2
- package/lib/core/validator/equal.validator.d.ts +0 -2
- package/lib/core/validator/max-string-length.validator.d.ts +0 -2
- package/lib/core/validator/password.validator.d.ts +0 -3
- package/lib/core/validator/precision-scale.validator.d.ts +0 -2
- package/lib/core/validator/required.validator.d.ts +0 -2
- package/lib/directives/clickoutside/click-outside-master.service.d.ts +0 -15
- package/lib/directives/clickoutside/click-outside.directive.d.ts +0 -18
- package/lib/directives/clickoutside/clickoutside.module.d.ts +0 -2
- package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +0 -14
- package/lib/directives/observe-visibility/observe-visibility.module.d.ts +0 -2
- package/lib/directives/overlay/overlay-parent.directive.d.ts +0 -6
- package/lib/directives/overlay/overlay.directive.d.ts +0 -25
- package/lib/directives/overlay/overlay.module.d.ts +0 -2
- package/lib/directives/ripple/ripple-ref.d.ts +0 -21
- package/lib/directives/ripple/ripple-renderer.d.ts +0 -56
- package/lib/directives/ripple/ripple.directive.d.ts +0 -56
- package/lib/directives/ripple/ripple.module.d.ts +0 -2
- package/lib/directives/ripple/scroll-dispatcher.service.d.ts +0 -51
- package/lib/directives/ripple/scrollable.directive.d.ts +0 -20
- package/lib/directives/ripple/viewport-ruler.service.d.ts +0 -29
- package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +0 -32
- package/lib/directives/screen-configuration/screen-configuration.module.d.ts +0 -2
- package/lib/directives/stopclick/stop-click.directive.d.ts +0 -10
- package/lib/directives/stopclick/stop-click.module.d.ts +0 -2
- package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +0 -13
- package/lib/directives/template-wrapper/template-wrapper.module.d.ts +0 -2
- package/lib/directives/tooltip/tooltip-directive.module.d.ts +0 -2
- package/lib/directives/tooltip/tooltip.directive.d.ts +0 -20
- package/lib/interfaces/dialog-response.interface.d.ts +0 -6
- package/lib/interfaces/scanner-input.interface.d.ts +0 -3
- package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +0 -3
- package/lib/interfaces/screen-config-adapter.component.interface.d.ts +0 -14
- package/lib/model/enum/app-button-type.enum.d.ts +0 -9
- package/lib/model/enum/app-popup-type.enum.d.ts +0 -6
- package/lib/model/icon-list-item.d.ts +0 -7
- package/lib/pipes/append.pipe.d.ts +0 -4
- package/lib/pipes/append.pipe.module.d.ts +0 -2
- package/lib/pipes/filter.pipe.d.ts +0 -4
- package/lib/pipes/filter.pipe.module.d.ts +0 -2
- package/lib/pipes/prepend.pipe.d.ts +0 -4
- package/lib/pipes/prepend.pipe.module.d.ts +0 -2
- package/lib/pipes/price-display-pipe.module.d.ts +0 -2
- package/lib/pipes/price-display.pipe.d.ts +0 -4
- package/lib/service/base-module-screen-config.service.d.ts +0 -47
- package/lib/service/base-module.service.d.ts +0 -22
- package/lib/service/color-sequence.service.d.ts +0 -7
- package/lib/service/excel-export.service.d.ts +0 -45
- package/lib/service/overlay.service.d.ts +0 -13
- package/lib/translation/core-components-translation.module.d.ts +0 -4
- package/lib/translation/core-components-translation.service.d.ts +0 -6
- package/lib/translation/core-dictionary.service.d.ts +0 -12
- package/lib/translation/core-localize.pipe.d.ts +0 -7
- package/public-api.d.ts +0 -138
|
@@ -1,773 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Input, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { FormMasterService } from '../../core/service/form-master.service';
|
|
4
|
-
import { BaseSimpleGridComponent } from './base-simple-grid.component';
|
|
5
|
-
import { ColumnAlign } from './simple-grid-column.directive';
|
|
6
|
-
import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
|
|
7
|
-
import { IconCacheService } from '../icon/icon-cache.service';
|
|
8
|
-
export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
9
|
-
constructor(icons, changeDetection, _formMaster) {
|
|
10
|
-
super(changeDetection);
|
|
11
|
-
this.icons = icons;
|
|
12
|
-
this.changeDetection = changeDetection;
|
|
13
|
-
this._formMaster = _formMaster;
|
|
14
|
-
this.defaultTextAlign = ColumnAlign.Left;
|
|
15
|
-
this.showAdd = false;
|
|
16
|
-
this.showDelete = false;
|
|
17
|
-
this.deselectAllowed = false;
|
|
18
|
-
this.editOnCellClick = true;
|
|
19
|
-
this.rightToolbar = false;
|
|
20
|
-
this.showGridSettings = false;
|
|
21
|
-
this.rowsPerPage = 50;
|
|
22
|
-
this.showColumnSort = false;
|
|
23
|
-
this.showRowButtons = false;
|
|
24
|
-
this.editing = false;
|
|
25
|
-
this.isSettingsMenuOpen = false;
|
|
26
|
-
this.editRowIndex = -1;
|
|
27
|
-
this.editCellIndex = -1;
|
|
28
|
-
this.selectedRowIndex = -1;
|
|
29
|
-
this.currentPage = 1;
|
|
30
|
-
this.sortDirection = 'asc';
|
|
31
|
-
this.hoveredRowIndex = -1;
|
|
32
|
-
this.Icons = CoreComponentsIcon;
|
|
33
|
-
this._doubleClicked = false;
|
|
34
|
-
this._newRow = false;
|
|
35
|
-
this.IconCacheService = IconCacheService;
|
|
36
|
-
this.CoreComponentsIcon = CoreComponentsIcon;
|
|
37
|
-
this.dataChanged.subscribe(() => {
|
|
38
|
-
this.currentPage = 1;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
set headerCells(cells) {
|
|
42
|
-
const headerElements = cells.toArray();
|
|
43
|
-
for (let i = 0; i < headerElements.length; i++) {
|
|
44
|
-
this.columns[i].elementRef = headerElements[i];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
showClass() {
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
handleKeyDown(event) {
|
|
51
|
-
if (!this.inlineEdit) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (event.code === 'Tab') {
|
|
55
|
-
event.preventDefault();
|
|
56
|
-
this._nextAvailableCellToEdit(!event.shiftKey, this.editCellIndex)
|
|
57
|
-
.then((index) => {
|
|
58
|
-
this.editCellIndex = index;
|
|
59
|
-
this.changeDetection.markForCheck();
|
|
60
|
-
});
|
|
61
|
-
this._detectChanges();
|
|
62
|
-
}
|
|
63
|
-
if (event.code === 'Escape') {
|
|
64
|
-
this.cancelEditRow();
|
|
65
|
-
}
|
|
66
|
-
if (event.code === 'Enter') {
|
|
67
|
-
this.validateAndSave();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
handleClickOutsideRow() {
|
|
71
|
-
this.validateAndSave();
|
|
72
|
-
}
|
|
73
|
-
getIsRowDisabled(idx) {
|
|
74
|
-
return this.disabledRows.indexOf(idx) > -1;
|
|
75
|
-
}
|
|
76
|
-
isRowDisabled(row, index) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
if (this.rowDisabledFn && (typeof this.rowDisabledFn === 'function')) {
|
|
79
|
-
const disabled = yield this.rowDisabledFn.call(this, row);
|
|
80
|
-
const idxRow = this.disabledRows.indexOf(index);
|
|
81
|
-
if (disabled) {
|
|
82
|
-
if (idxRow < 0) {
|
|
83
|
-
this.disabledRows.push(index);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
if (idxRow > -1) {
|
|
88
|
-
this.disabledRows.splice(idxRow, 1);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return disabled;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
addNewRow() {
|
|
99
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
if (this.inlineEdit) {
|
|
101
|
-
const valid = this.validateAndSave();
|
|
102
|
-
if (valid) {
|
|
103
|
-
this._newRowReference = {};
|
|
104
|
-
this.data.push(this._newRowReference);
|
|
105
|
-
this._detectChanges();
|
|
106
|
-
this._newRow = true;
|
|
107
|
-
this.editing = true;
|
|
108
|
-
if (this.rowsPerPage && this.data.length > this.rowsPerPage) {
|
|
109
|
-
// navigate to last page
|
|
110
|
-
this.currentPage = Math.ceil(this.data.length / this.rowsPerPage);
|
|
111
|
-
const relativeIndex = (this.data.length - 1) % this.rowsPerPage;
|
|
112
|
-
this.selectedRowIndex = relativeIndex;
|
|
113
|
-
this.editRowIndex = relativeIndex;
|
|
114
|
-
// store reference
|
|
115
|
-
this.rowToEdit = this._newRowReference;
|
|
116
|
-
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
117
|
-
setTimeout(() => {
|
|
118
|
-
var _a, _b;
|
|
119
|
-
const el = (_b = (_a = this.rowElements) === null || _a === void 0 ? void 0 : _a.last) === null || _b === void 0 ? void 0 : _b.nativeElement;
|
|
120
|
-
if (el) {
|
|
121
|
-
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
122
|
-
}
|
|
123
|
-
}, 200);
|
|
124
|
-
// reset reference to the new row after editCellIndex
|
|
125
|
-
this.rowToEdit = this._newRowReference;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this.editRowIndex = this.data.length - 1;
|
|
129
|
-
this.rowToEdit = this._newRowReference;
|
|
130
|
-
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
131
|
-
}
|
|
132
|
-
this.addRow.next();
|
|
133
|
-
this._detectChanges();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
this.addRow.next();
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
validateAndSave(stopediting = true) {
|
|
142
|
-
if (!this.editing) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
const valid = this._formMaster.submitSlaves();
|
|
146
|
-
this._detectChanges();
|
|
147
|
-
if (valid) {
|
|
148
|
-
this._saveRow(stopediting);
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
cancelEditRow() {
|
|
154
|
-
if (!this.editing) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
if (this._newRow) {
|
|
158
|
-
this.data.splice(this.data.length - 1, 1);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
this.data[this.editRowIndex] = this.rowToEdit;
|
|
162
|
-
}
|
|
163
|
-
this._resetEdit();
|
|
164
|
-
this._detectChanges();
|
|
165
|
-
}
|
|
166
|
-
removeRow(row) {
|
|
167
|
-
this.deleteRow.next(row);
|
|
168
|
-
if (this.currentPage !== 1) {
|
|
169
|
-
this.currentPage = 1;
|
|
170
|
-
this.selectedRowIndex = -1;
|
|
171
|
-
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
172
|
-
}
|
|
173
|
-
this._detectChanges();
|
|
174
|
-
}
|
|
175
|
-
removeSelectedRow() {
|
|
176
|
-
let absoluteIndex = this.selectedRowIndex;
|
|
177
|
-
if (this.rowsPerPage) {
|
|
178
|
-
absoluteIndex = (this.currentPage - 1) * this.rowsPerPage + this.selectedRowIndex;
|
|
179
|
-
}
|
|
180
|
-
this.deleteRow.next(this.data[absoluteIndex]);
|
|
181
|
-
if (this.currentPage !== 1) {
|
|
182
|
-
this.currentPage = 1;
|
|
183
|
-
this.selectedRowIndex = -1;
|
|
184
|
-
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
185
|
-
}
|
|
186
|
-
this._detectChanges();
|
|
187
|
-
}
|
|
188
|
-
handleClickRow(event, index) {
|
|
189
|
-
if (this.inlineEdit && this.showRowButtons && !this.editing) {
|
|
190
|
-
this.editing = false;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
setTimeout(() => {
|
|
194
|
-
if (this._doubleClicked) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
this.selectTheRow(index);
|
|
198
|
-
if (this.inlineEdit && !this.showRowButtons) {
|
|
199
|
-
this.editRow(event, true, index);
|
|
200
|
-
}
|
|
201
|
-
}, 200);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
selectTheRow(index, emit = true) {
|
|
205
|
-
if (this.selectedRowIndex === -1 || (this.selectedRowIndex !== index && ((this.editing && this.validateAndSave()) || !this.editing))) {
|
|
206
|
-
this.selectedRowIndex = index;
|
|
207
|
-
const absoluteIndex = this.rowsPerPage ? (this.currentPage - 1) * this.rowsPerPage + index : index;
|
|
208
|
-
if (emit) {
|
|
209
|
-
this.selectRow.next(this.data[absoluteIndex]);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
else if (this.selectedRowIndex === index && this.deselectAllowed && ((this.editing && this.validateAndSave()) || !this.editing)) {
|
|
213
|
-
this.selectedRowIndex = -1;
|
|
214
|
-
if (emit) {
|
|
215
|
-
this.deselectRow.next();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
this._detectChanges();
|
|
219
|
-
}
|
|
220
|
-
handleDblClickRow(event, index, row) {
|
|
221
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
222
|
-
if (yield this.isRowDisabled(row, index)) {
|
|
223
|
-
this.selectedRowIndex = -1;
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
let canEdit = true;
|
|
227
|
-
if (this.canRowBeEdittedFn && typeof this.canRowBeEdittedFn === 'function') {
|
|
228
|
-
canEdit = yield this.canRowBeEdittedFn.call(this, row);
|
|
229
|
-
}
|
|
230
|
-
if (canEdit) {
|
|
231
|
-
this._doubleClicked = true;
|
|
232
|
-
this.dblClickRow.next(this.data[index]);
|
|
233
|
-
this.selectTheRow(index, false);
|
|
234
|
-
if (this.inlineEdit && !this.showRowButtons) {
|
|
235
|
-
this.editRow(event);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
this._resetDblClick();
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
editRow(event, selectCell = true, rowIndex) {
|
|
242
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
243
|
-
if (rowIndex !== undefined) {
|
|
244
|
-
this.selectTheRow(rowIndex);
|
|
245
|
-
}
|
|
246
|
-
this.editing = true;
|
|
247
|
-
this.editRowIndex = this.selectedRowIndex;
|
|
248
|
-
this.rowToEdit = this.data[this.editRowIndex];
|
|
249
|
-
if (this.showRowButtons && this.inlineEdit && selectCell) {
|
|
250
|
-
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
251
|
-
}
|
|
252
|
-
this._detectChanges();
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
handleCellClick(event, row, rowIndex, cellIndex) {
|
|
256
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
257
|
-
if (this.editOnCellClick) {
|
|
258
|
-
if (yield this.isRowDisabled(row, rowIndex)) {
|
|
259
|
-
this.selectedRowIndex = -1;
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
if (this.inlineEdit) {
|
|
263
|
-
this.editRowIndex = rowIndex;
|
|
264
|
-
this.editCellIndex = cellIndex;
|
|
265
|
-
this.editing = true;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
this.editCellIndex = cellIndex;
|
|
270
|
-
}
|
|
271
|
-
this._detectChanges();
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
toggleSettingsMenu() {
|
|
275
|
-
this.headerColumnsCopy.forEach(i => i.isSelected = false);
|
|
276
|
-
this.isSettingsMenuOpen = !this.isSettingsMenuOpen;
|
|
277
|
-
}
|
|
278
|
-
toggleColumnMenu(col) {
|
|
279
|
-
if (!this.showGridSettings) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
this.isSettingsMenuOpen = false;
|
|
283
|
-
if (col.isSelected) {
|
|
284
|
-
col.isSelected = false;
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
this.headerColumnsCopy.forEach(i => i.isSelected = false);
|
|
288
|
-
col.isSelected = true;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
hideColumn(col) {
|
|
292
|
-
col.isSelected = false;
|
|
293
|
-
this.headerColumnsCopy = this.headerColumnsCopy.filter((obj) => {
|
|
294
|
-
return obj !== col;
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
sortColumn(col, columnValue) {
|
|
298
|
-
col.isSelected = false;
|
|
299
|
-
if (this.sortColumnValue === columnValue) {
|
|
300
|
-
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
this.sortColumnValue = columnValue;
|
|
304
|
-
this.sortDirection = 'asc';
|
|
305
|
-
}
|
|
306
|
-
const direction = this.sortDirection === 'asc' ? 1 : -1;
|
|
307
|
-
const sorted = [...this.data].sort((a, b) => {
|
|
308
|
-
let valA = a[columnValue];
|
|
309
|
-
let valB = b[columnValue];
|
|
310
|
-
if (valA == null && valB == null) {
|
|
311
|
-
return 0;
|
|
312
|
-
}
|
|
313
|
-
if (valA == null) {
|
|
314
|
-
return -1 * direction;
|
|
315
|
-
}
|
|
316
|
-
if (valB == null) {
|
|
317
|
-
return 1 * direction;
|
|
318
|
-
}
|
|
319
|
-
// Handle ISO date string
|
|
320
|
-
const isDateA = typeof valA === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(valA);
|
|
321
|
-
const isDateB = typeof valB === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(valB);
|
|
322
|
-
if (isDateA && isDateB) {
|
|
323
|
-
const timeA = new Date(valA).getTime();
|
|
324
|
-
const timeB = new Date(valB).getTime();
|
|
325
|
-
return (timeA - timeB) * direction;
|
|
326
|
-
}
|
|
327
|
-
// Fallback for numbers/strings
|
|
328
|
-
if (typeof valA === 'string' && typeof valB === 'string') {
|
|
329
|
-
return valA.localeCompare(valB) * direction;
|
|
330
|
-
}
|
|
331
|
-
return (valA > valB ? 1 : valA < valB ? -1 : 0) * direction;
|
|
332
|
-
});
|
|
333
|
-
this.data = sorted;
|
|
334
|
-
this._detectChanges();
|
|
335
|
-
}
|
|
336
|
-
showAllColumns() {
|
|
337
|
-
this.isSettingsMenuOpen = false;
|
|
338
|
-
this.headerColumnsCopy = this.headerColumns;
|
|
339
|
-
}
|
|
340
|
-
exportToExcel() {
|
|
341
|
-
this.isSettingsMenuOpen = false;
|
|
342
|
-
const exportData = this.exportData.length > 0 ? this._filterSelectedOrReturnAll(this.exportData) : this._filterSelectedOrReturnAll(this.data);
|
|
343
|
-
const columns = this.headerColumnsCopy.map(column => {
|
|
344
|
-
return ({
|
|
345
|
-
key: column.field,
|
|
346
|
-
header: column.headerText
|
|
347
|
-
});
|
|
348
|
-
});
|
|
349
|
-
const headers = columns.map(col => col.header);
|
|
350
|
-
const rows = exportData.map(row => columns.map(col => {
|
|
351
|
-
const value = row[col.key];
|
|
352
|
-
if (value instanceof Date) {
|
|
353
|
-
const formattedDate = value.toISOString().split('T')[0];
|
|
354
|
-
const [year, month, day] = formattedDate.split('-');
|
|
355
|
-
return `${day}-${month}-${year}`;
|
|
356
|
-
}
|
|
357
|
-
else if (typeof value === 'number') {
|
|
358
|
-
const hasDecimal = (num) => !Number.isInteger(num);
|
|
359
|
-
return hasDecimal(value) ? value.toFixed(2) : value.toFixed(0);
|
|
360
|
-
}
|
|
361
|
-
else if (Array.isArray(value)) {
|
|
362
|
-
return value.join(', ');
|
|
363
|
-
}
|
|
364
|
-
else if (typeof value === 'object' && value !== null) {
|
|
365
|
-
return JSON.stringify(value);
|
|
366
|
-
}
|
|
367
|
-
else if (typeof value === 'boolean') {
|
|
368
|
-
return String(value);
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
if (!value)
|
|
372
|
-
return '';
|
|
373
|
-
if (typeof value === 'string' && value.includes('T00:00:00')) {
|
|
374
|
-
const [year, month, day] = value.replace('T00:00:00', '').split('-');
|
|
375
|
-
return `${day}-${month}-${year}`;
|
|
376
|
-
}
|
|
377
|
-
return String(value);
|
|
378
|
-
}
|
|
379
|
-
}));
|
|
380
|
-
// const csvContent = [headers, ...rows].map(row =>
|
|
381
|
-
// row.map(cell => `"${cell.replace(/"/g, '""')}"`).join(',')
|
|
382
|
-
// ).join('\r\n');
|
|
383
|
-
const csvContent = [headers, ...rows].map(row => row.map((cell) => `"${String(cell).replace(/"/g, '""')}"`).join(',')).join('\r\n');
|
|
384
|
-
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
|
|
385
|
-
const link = document.createElement('a');
|
|
386
|
-
const url = URL.createObjectURL(blob);
|
|
387
|
-
link.href = url;
|
|
388
|
-
link.setAttribute('download', 'ExcelSheet');
|
|
389
|
-
document.body.appendChild(link);
|
|
390
|
-
link.click();
|
|
391
|
-
document.body.removeChild(link);
|
|
392
|
-
// this.excelExportService.exportToExcel(
|
|
393
|
-
// this.data,
|
|
394
|
-
// columns,
|
|
395
|
-
// 'ExcelSheet',
|
|
396
|
-
// 'Sheet1'
|
|
397
|
-
// );
|
|
398
|
-
}
|
|
399
|
-
goToPreviousPage() {
|
|
400
|
-
this.currentPage -= 1;
|
|
401
|
-
}
|
|
402
|
-
goToNextPage() {
|
|
403
|
-
this.currentPage += 1;
|
|
404
|
-
}
|
|
405
|
-
setCurrentPage(page) {
|
|
406
|
-
this.currentPage = page;
|
|
407
|
-
}
|
|
408
|
-
get isNewRow() {
|
|
409
|
-
return this._newRow;
|
|
410
|
-
}
|
|
411
|
-
_filterSelectedOrReturnAll(items) {
|
|
412
|
-
const hasSelectedTrue = items.some(item => item.selected === true);
|
|
413
|
-
return hasSelectedTrue ? items.filter(item => item.selected === true) : items;
|
|
414
|
-
}
|
|
415
|
-
prepareDataRow(row, index) {
|
|
416
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
417
|
-
yield this.isRowDisabled(row, index);
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
_resetDblClick() {
|
|
421
|
-
setTimeout(() => {
|
|
422
|
-
this._doubleClicked = false;
|
|
423
|
-
}, 500);
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
*
|
|
427
|
-
* @param next; Move to next or previous cell
|
|
428
|
-
* @param start; Start from cellindex
|
|
429
|
-
* @private
|
|
430
|
-
*/
|
|
431
|
-
_nextAvailableCellToEdit(next, start = -1) {
|
|
432
|
-
return new Promise((resolve, reject) => {
|
|
433
|
-
const numEditableColumns = this.columns.filter(c => !c.readonly).length;
|
|
434
|
-
const wantedIndex = start + (next ? 1 : -1);
|
|
435
|
-
if (wantedIndex >= numEditableColumns) {
|
|
436
|
-
this._getNextEditRowIndex()
|
|
437
|
-
.then((index) => {
|
|
438
|
-
this.editRowIndex = index;
|
|
439
|
-
resolve(this._getNextEditCellIndex(0));
|
|
440
|
-
})
|
|
441
|
-
.catch((e) => {
|
|
442
|
-
reject();
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
else if (wantedIndex < 0) {
|
|
446
|
-
this._getPreviousEditRowIndex()
|
|
447
|
-
.then((index) => {
|
|
448
|
-
this.editRowIndex = index;
|
|
449
|
-
resolve(this._getPreviousEditCellIndex(this.columns.length - 1));
|
|
450
|
-
})
|
|
451
|
-
.catch((e) => {
|
|
452
|
-
reject();
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
resolve(next ? this._getNextEditCellIndex(start + 1) : this._getPreviousEditCellIndex(start - 1));
|
|
457
|
-
}
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
_getNextEditCellIndex(start) {
|
|
461
|
-
for (let i = start; i < this.columns.length; i++) {
|
|
462
|
-
if (!this.columns[i].readonly) {
|
|
463
|
-
return i;
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
_getPreviousEditCellIndex(start) {
|
|
468
|
-
for (let i = start; i >= 0; i--) {
|
|
469
|
-
if (!this.columns[i].readonly) {
|
|
470
|
-
return i;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
_getNextEditRowIndex() {
|
|
475
|
-
return new Promise((resolve, reject) => {
|
|
476
|
-
let newRowIndex = 0;
|
|
477
|
-
if (this.editRowIndex + 1 >= this.data.length) {
|
|
478
|
-
if (this.autoAddRow) {
|
|
479
|
-
this.addNewRow();
|
|
480
|
-
newRowIndex = this.editRowIndex;
|
|
481
|
-
}
|
|
482
|
-
else {
|
|
483
|
-
newRowIndex = 0;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
newRowIndex = this.editRowIndex + 1;
|
|
488
|
-
}
|
|
489
|
-
if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
|
|
490
|
-
if (this.validateAndSave(false)) {
|
|
491
|
-
this.rowToEdit = this.data[newRowIndex];
|
|
492
|
-
resolve(newRowIndex);
|
|
493
|
-
}
|
|
494
|
-
else {
|
|
495
|
-
reject();
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
else {
|
|
499
|
-
resolve(newRowIndex);
|
|
500
|
-
}
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
_getPreviousEditRowIndex() {
|
|
504
|
-
return new Promise((resolve, reject) => {
|
|
505
|
-
let newRowIndex = 0;
|
|
506
|
-
if (this.editRowIndex - 1 < 0) {
|
|
507
|
-
newRowIndex = this.data.length - 1;
|
|
508
|
-
}
|
|
509
|
-
else {
|
|
510
|
-
newRowIndex = this.editRowIndex - 1;
|
|
511
|
-
}
|
|
512
|
-
if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
|
|
513
|
-
if (this.validateAndSave(false)) {
|
|
514
|
-
this.rowToEdit = this.data[newRowIndex];
|
|
515
|
-
resolve(newRowIndex);
|
|
516
|
-
}
|
|
517
|
-
else {
|
|
518
|
-
reject();
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
else {
|
|
522
|
-
resolve(newRowIndex);
|
|
523
|
-
}
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
_saveRow(stopediting = true) {
|
|
527
|
-
if (this._newRow) {
|
|
528
|
-
this.saveRow.next(this._newRowReference);
|
|
529
|
-
this._newRowReference = null; // clear
|
|
530
|
-
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
531
|
-
}
|
|
532
|
-
else {
|
|
533
|
-
let index = -1; // existing row
|
|
534
|
-
if (this.rowsPerPage) {
|
|
535
|
-
index = (this.currentPage - 1) * this.rowsPerPage + this.editRowIndex;
|
|
536
|
-
}
|
|
537
|
-
else {
|
|
538
|
-
index = this.editRowIndex;
|
|
539
|
-
}
|
|
540
|
-
if (index >= 0 && index < this.data.length) {
|
|
541
|
-
this.saveRow.next(this.data[index]);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
this._newRow = false;
|
|
545
|
-
if (stopediting) {
|
|
546
|
-
this._resetEdit();
|
|
547
|
-
}
|
|
548
|
-
this._detectChanges();
|
|
549
|
-
}
|
|
550
|
-
_detectChanges() {
|
|
551
|
-
this.changeDetection.detectChanges();
|
|
552
|
-
}
|
|
553
|
-
_resetEdit() {
|
|
554
|
-
this._newRow = false;
|
|
555
|
-
this.selectedRowIndex = -1;
|
|
556
|
-
this.editRowIndex = -1;
|
|
557
|
-
this.editCellIndex = -1;
|
|
558
|
-
this.editing = false;
|
|
559
|
-
this.rowToEdit = undefined;
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
SimpleGridComponent.decorators = [
|
|
563
|
-
{ type: Component, args: [{
|
|
564
|
-
selector: 'co-simple-grid',
|
|
565
|
-
template: `
|
|
566
|
-
<co-grid-toolbar
|
|
567
|
-
*ngIf="showToolbar" [class.right]="rightToolbar"
|
|
568
|
-
[showEdit]="showEdit"
|
|
569
|
-
[showAdd]="showAdd"
|
|
570
|
-
[showDelete]="showDelete"
|
|
571
|
-
[deleteEnabled]="selectedRowIndex > -1"
|
|
572
|
-
(addClick)="addNewRow()"
|
|
573
|
-
(editClick)="editRow($event)"
|
|
574
|
-
(saveClick)="validateAndSave()"
|
|
575
|
-
(cancelClick)="cancelEditRow()"
|
|
576
|
-
(deleteClick)="removeSelectedRow()">
|
|
577
|
-
</co-grid-toolbar>
|
|
578
|
-
|
|
579
|
-
<table
|
|
580
|
-
id="simple-grid-table"
|
|
581
|
-
class="simple-grid-table"
|
|
582
|
-
[clickOutside]="editing"
|
|
583
|
-
(clickOutside)="handleClickOutsideRow()">
|
|
584
|
-
<colgroup>
|
|
585
|
-
<col
|
|
586
|
-
*ngFor="let column of headerColumnsCopy; let index = index"
|
|
587
|
-
[class.simple-grid-column-auto-fit]="column.autoFit"
|
|
588
|
-
[style.width.px]="column.width"
|
|
589
|
-
[style.min-width.px]="MIN_COLUMN_WIDTH">
|
|
590
|
-
<col
|
|
591
|
-
*ngIf="showRowButtons"
|
|
592
|
-
[class.simple-grid-column-auto-fit]="true"
|
|
593
|
-
[style.min-width.px]="MIN_COLUMN_WIDTH">
|
|
594
|
-
>
|
|
595
|
-
</colgroup>
|
|
596
|
-
<thead>
|
|
597
|
-
<tr>
|
|
598
|
-
<th
|
|
599
|
-
scope="col"
|
|
600
|
-
#headerCell
|
|
601
|
-
class="simple-grid-column-header"
|
|
602
|
-
*ngFor="let column of headerColumnsCopy; let index = index">
|
|
603
|
-
<div
|
|
604
|
-
class="simple-grid-column-header-wrapper"
|
|
605
|
-
[class.resizable]="resizable"
|
|
606
|
-
[class.selected]="column.isSelected"
|
|
607
|
-
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
|
|
608
|
-
<ng-container *ngIf="column.headerTemplate; else noHeaderTemplate">
|
|
609
|
-
<ng-container [ngTemplateOutlet]="column.headerTemplate"></ng-container>
|
|
610
|
-
</ng-container>
|
|
611
|
-
<ng-template #noHeaderTemplate>
|
|
612
|
-
<div
|
|
613
|
-
class="simple-grid-column-header-label"
|
|
614
|
-
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
|
|
615
|
-
[class.with-menu]="showGridSettings"
|
|
616
|
-
[class.with-sort]="showColumnSort"
|
|
617
|
-
[textContent]="column.headerText || ' '" [title]="column.headerText"
|
|
618
|
-
(click)="showColumnSort ? sortColumn(column, column.field) : toggleColumnMenu(column)">
|
|
619
|
-
</div>
|
|
620
|
-
|
|
621
|
-
<div class="sort-column" *ngIf="showColumnSort">
|
|
622
|
-
<co-button
|
|
623
|
-
(click)="sortColumn(column, column?.field)"
|
|
624
|
-
[iconData]="icons.getIcon(Icons.ArrowUpArrowDown)">
|
|
625
|
-
</co-button>
|
|
626
|
-
</div>
|
|
627
|
-
|
|
628
|
-
<div class="column-menu" *ngIf="column.isSelected">
|
|
629
|
-
<h3 [textContent]="'COLUMN_OPTIONS' | coreLocalize"></h3>
|
|
630
|
-
<ul>
|
|
631
|
-
<li (click)="hideColumn(column)">Hide Column</li>
|
|
632
|
-
<li (click)="sortColumn(column, column.field)">Sort Column</li>
|
|
633
|
-
</ul>
|
|
634
|
-
</div>
|
|
635
|
-
</ng-template>
|
|
636
|
-
<div
|
|
637
|
-
*ngIf="resizable && column.resizable"
|
|
638
|
-
class="simple-grid-column-sizer"
|
|
639
|
-
(mousedown)="handleSizerMouseDown($event, column)">
|
|
640
|
-
</div>
|
|
641
|
-
</div>
|
|
642
|
-
</th>
|
|
643
|
-
</tr>
|
|
644
|
-
|
|
645
|
-
<div *ngIf="showGridSettings" class="grid-settings">
|
|
646
|
-
<co-button
|
|
647
|
-
[class.selected]="isSettingsMenuOpen"
|
|
648
|
-
[iconData]="icons.getIcon(Icons.CogWheels)"
|
|
649
|
-
(click)="toggleSettingsMenu()">
|
|
650
|
-
</co-button>
|
|
651
|
-
|
|
652
|
-
<div class="settings-menu" *ngIf="isSettingsMenuOpen">
|
|
653
|
-
<h3 [textContent]="'GRID_OPTIONS' | coreLocalize"></h3>
|
|
654
|
-
<ul>
|
|
655
|
-
<li (click)="exportToExcel()">Export to Excel</li>
|
|
656
|
-
<li *ngIf="headerColumnsCopy.length !== headerColumns.length" (click)="showAllColumns()">
|
|
657
|
-
Show All Columns
|
|
658
|
-
</li>
|
|
659
|
-
</ul>
|
|
660
|
-
</div>
|
|
661
|
-
</div>
|
|
662
|
-
</thead>
|
|
663
|
-
<tbody
|
|
664
|
-
#dropList cdkDropList cdkDropListOrientation="vertical"
|
|
665
|
-
class="simple-grid-drag-drop-list"
|
|
666
|
-
[cdkDropListDisabled]="!dragDropEnabled || editing"
|
|
667
|
-
[cdkDropListData]="data"
|
|
668
|
-
[cdkDropListEnterPredicate]="handleCanDragDrop"
|
|
669
|
-
(cdkDropListDropped)="handleDrop($event)">
|
|
670
|
-
<co-form class="simple-grid-row-form">
|
|
671
|
-
<tr
|
|
672
|
-
#rowElement
|
|
673
|
-
class="simple-grid-row"
|
|
674
|
-
[class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
|
|
675
|
-
[class.disabled]="getIsRowDisabled(rowIndex)"
|
|
676
|
-
[class.editing]="rowIndex === editRowIndex"
|
|
677
|
-
*ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
|
|
678
|
-
cdkDrag
|
|
679
|
-
(click)="handleClickRow($event, rowIndex)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
|
|
680
|
-
(visibilityChange)="rowVisible.next(row)"
|
|
681
|
-
(mouseenter)="hoveredRowIndex = rowIndex"
|
|
682
|
-
(mouseleave)="hoveredRowIndex = -1"
|
|
683
|
-
>
|
|
684
|
-
<ng-container *ngIf="isSingleColumnRow(row)">
|
|
685
|
-
<td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
|
|
686
|
-
<co-simple-grid-cell
|
|
687
|
-
[column]="columns[singleColumnIndex(row)]"
|
|
688
|
-
[row]="row"
|
|
689
|
-
[editMode]="false">
|
|
690
|
-
</co-simple-grid-cell>
|
|
691
|
-
</td>
|
|
692
|
-
</ng-container>
|
|
693
|
-
<ng-container *ngIf="!isSingleColumnRow(row)">
|
|
694
|
-
<ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
|
|
695
|
-
<td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
|
|
696
|
-
<co-simple-grid-cell
|
|
697
|
-
[column]="column"
|
|
698
|
-
[row]="row"
|
|
699
|
-
[editMode]="inlineEdit && editing && rowIndex === editRowIndex"
|
|
700
|
-
[fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
|
|
701
|
-
(cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
|
|
702
|
-
</co-simple-grid-cell>
|
|
703
|
-
<div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
|
|
704
|
-
</td>
|
|
705
|
-
</ng-container>
|
|
706
|
-
<ng-container *ngIf="showRowButtons">
|
|
707
|
-
<td class="icons-container"
|
|
708
|
-
[class.show-content]="selectedRowIndex === rowIndex || hoveredRowIndex === rowIndex">
|
|
709
|
-
<ng-container>
|
|
710
|
-
<co-icon class="icon-item icon-edit"
|
|
711
|
-
*ngIf="editRowIndex !== rowIndex && inlineEdit"
|
|
712
|
-
[iconData]="icons.getIcon(Icons.PenToSquareSolid)"
|
|
713
|
-
(click)="editRow($event, true, rowIndex); $event.stopPropagation()"></co-icon>
|
|
714
|
-
<co-icon class="icon-item icon-delete"
|
|
715
|
-
[iconData]="icons.getIcon(Icons.TrashBin)"
|
|
716
|
-
*ngIf="(editRowIndex !== rowIndex && showDelete)"
|
|
717
|
-
(click)="removeRow(data[rowIndex])"></co-icon>
|
|
718
|
-
</ng-container>
|
|
719
|
-
<ng-container
|
|
720
|
-
*ngIf="editing && inlineEdit && (selectedRowIndex === rowIndex || isNewRow) && editRowIndex === rowIndex">
|
|
721
|
-
<co-button class="save-button"
|
|
722
|
-
[iconData]="icons.getIcon(Icons.CheckDuotone)"
|
|
723
|
-
(click)="validateAndSave(); $event.stopPropagation()"></co-button>
|
|
724
|
-
<co-button class="close-button"
|
|
725
|
-
[iconData]="icons.getIcon(Icons.CrossSkinny)"
|
|
726
|
-
(click)="cancelEditRow(); $event.stopPropagation() "></co-button>
|
|
727
|
-
</ng-container>
|
|
728
|
-
</td>
|
|
729
|
-
</ng-container>
|
|
730
|
-
</ng-container>
|
|
731
|
-
</tr>
|
|
732
|
-
</co-form>
|
|
733
|
-
</tbody>
|
|
734
|
-
</table>
|
|
735
|
-
<co-pagination-bar
|
|
736
|
-
*ngIf="data?.length > rowsPerPage" class="pagination-bar"
|
|
737
|
-
[itemsPerPage]="rowsPerPage"
|
|
738
|
-
[currentPage]="currentPage"
|
|
739
|
-
[totalItems]="data.length"
|
|
740
|
-
[autoHide]="true"
|
|
741
|
-
(previousClick)="goToPreviousPage()"
|
|
742
|
-
(nextClick)="goToNextPage()"
|
|
743
|
-
(pageClick)="setCurrentPage($event)">
|
|
744
|
-
</co-pagination-bar>
|
|
745
|
-
`,
|
|
746
|
-
providers: [FormMasterService],
|
|
747
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
748
|
-
encapsulation: ViewEncapsulation.None
|
|
749
|
-
},] }
|
|
750
|
-
];
|
|
751
|
-
SimpleGridComponent.ctorParameters = () => [
|
|
752
|
-
{ type: IconCacheService },
|
|
753
|
-
{ type: ChangeDetectorRef },
|
|
754
|
-
{ type: FormMasterService }
|
|
755
|
-
];
|
|
756
|
-
SimpleGridComponent.propDecorators = {
|
|
757
|
-
headerCells: [{ type: ViewChildren, args: ['headerCell',] }],
|
|
758
|
-
rowElements: [{ type: ViewChildren, args: ['rowElement',] }],
|
|
759
|
-
showAdd: [{ type: Input }],
|
|
760
|
-
showDelete: [{ type: Input }],
|
|
761
|
-
deselectAllowed: [{ type: Input }],
|
|
762
|
-
editOnCellClick: [{ type: Input }],
|
|
763
|
-
rightToolbar: [{ type: Input }],
|
|
764
|
-
showGridSettings: [{ type: Input }],
|
|
765
|
-
rowsPerPage: [{ type: Input }],
|
|
766
|
-
rowDisabledFn: [{ type: Input }],
|
|
767
|
-
showColumnSort: [{ type: Input }],
|
|
768
|
-
showRowButtons: [{ type: Input }],
|
|
769
|
-
canRowBeEdittedFn: [{ type: Input }],
|
|
770
|
-
showClass: [{ type: HostBinding, args: ['class.co-simple-grid',] }],
|
|
771
|
-
handleKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
|
|
772
|
-
};
|
|
773
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBOEw1RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBaUc5RCxZQUNTLEtBQXVCLEVBQ3BCLGVBQWtDLEVBQ3BDLFdBQThCO1FBRXRDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUpoQixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBbkd4QixxQkFBZ0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQVkxRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFHakMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFHaEMsaUJBQVksR0FBWSxLQUFL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QkFxTXRCLFlBQVksU0FBQyxZQUFZOzBCQU96QixZQUFZLFNBQUMsWUFBWTtzQkFFekIsS0FBSzt5QkFHTCxLQUFLOzhCQUdMLEtBQUs7OEJBR0wsS0FBSzsyQkFHTCxLQUFLOytCQUdMLEtBQUs7MEJBR0wsS0FBSzs0QkFHTCxLQUFLOzZCQUdMLEtBQUs7NkJBR0wsS0FBSztnQ0FNTCxLQUFLO3dCQUdMLFdBQVcsU0FBQyxzQkFBc0I7NEJBS2xDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCwgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtTWFzdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2Zvcm0tbWFzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VTaW1wbGVHcmlkQ29tcG9uZW50fSBmcm9tICcuL2Jhc2Utc2ltcGxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb2x1bW5BbGlnbn0gZnJvbSAnLi9zaW1wbGUtZ3JpZC1jb2x1bW4uZGlyZWN0aXZlJztcclxuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gJy4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9pY29uL2ljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7RXhwb3J0Q29sdW1ufSBmcm9tICcuLi8uLi9zZXJ2aWNlL2V4Y2VsLWV4cG9ydC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY28tc2ltcGxlLWdyaWQnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8Y28tZ3JpZC10b29sYmFyXHJcbiAgICAgICpuZ0lmPVwic2hvd1Rvb2xiYXJcIiBbY2xhc3MucmlnaHRdPVwicmlnaHRUb29sYmFyXCJcclxuICAgICAgW3Nob3dFZGl0XT1cInNob3dFZGl0XCJcclxuICAgICAgW3Nob3dBZGRdPVwic2hvd0FkZFwiXHJcbiAgICAgIFtzaG93RGVsZXRlXT1cInNob3dEZWxldGVcIlxyXG4gICAgICBbZGVsZXRlRW5hYmxlZF09XCJzZWxlY3RlZFJvd0luZGV4ID4gLTFcIlxyXG4gICAgICAoYWRkQ2xpY2spPVwiYWRkTmV3Um93KClcIlxyXG4gICAgICAoZWRpdENsaWNrKT1cImVkaXRSb3coJGV2ZW50KVwiXHJcbiAgICAgIChzYXZlQ2xpY2spPVwidmFsaWRhdGVBbmRTYXZlKClcIlxyXG4gICAgICAoY2FuY2VsQ2xpY2spPVwiY2FuY2VsRWRpdFJvdygpXCJcclxuICAgICAgKGRlbGV0ZUNsaWNrKT1cInJlbW92ZVNlbGVjdGVkUm93KClcIj5cclxuICAgIDwvY28tZ3JpZC10b29sYmFyPlxyXG5cclxuICAgIDx0YWJsZVxyXG4gICAgICBpZD1cInNpbXBsZS1ncmlkLXRhYmxlXCJcclxuICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgIFtjbGlja091dHNpZGVdPVwiZWRpdGluZ1wiXHJcbiAgICAgIChjbGlja091dHNpZGUpPVwiaGFuZGxlQ2xpY2tPdXRzaWRlUm93KClcIj5cclxuICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgIDxjb2xcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgaGVhZGVyQ29sdW1uc0NvcHk7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgIFtjbGFzcy5zaW1wbGUtZ3JpZC1jb2x1bW4tYXV0by1maXRdPVwiY29sdW1uLmF1dG9GaXRcIlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIk1JTl9DT0xVTU5fV0lEVEhcIj5cclxuICAgICAgICA8Y29sXHJcbiAgICAgICAgICAqbmdJZj1cInNob3dSb3dCdXR0b25zXCJcclxuICAgICAgICAgIFtjbGFzcy5zaW1wbGUtZ3JpZC1jb2x1bW4tYXV0by1maXRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIk1JTl9DT0xVTU5fV0lEVEhcIj5cclxuICAgICAgICA+XHJcbiAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgc2NvcGU9XCJjb2xcIlxyXG4gICAgICAgICAgI2hlYWRlckNlbGxcclxuICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlclwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGhlYWRlckNvbHVtbnNDb3B5OyBsZXQgaW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXItd3JhcHBlclwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5yZXNpemFibGVdPVwicmVzaXphYmxlXCJcclxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNvbHVtbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLnRleHRBbGlnbiA/IGNvbHVtbi50ZXh0QWxpZ24gOiBkZWZhdWx0VGV4dEFsaWduXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGU7IGVsc2Ugbm9IZWFkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSGVhZGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4taGVhZGVyLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi50ZXh0QWxpZ24gPyBjb2x1bW4udGV4dEFsaWduIDogZGVmYXVsdFRleHRBbGlnblwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3Mud2l0aC1tZW51XT1cInNob3dHcmlkU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLndpdGgtc29ydF09XCJzaG93Q29sdW1uU29ydFwiXHJcbiAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwiY29sdW1uLmhlYWRlclRleHQgfHwgJyZuYnNwOydcIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclRleHRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb2x1bW5Tb3J0ID8gc29ydENvbHVtbihjb2x1bW4sIGNvbHVtbi5maWVsZCkgOiB0b2dnbGVDb2x1bW5NZW51KGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtY29sdW1uXCIgKm5nSWY9XCJzaG93Q29sdW1uU29ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbj8uZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25zLmdldEljb24oSWNvbnMuQXJyb3dVcEFycm93RG93bilcIj5cclxuICAgICAgICAgICAgICAgIDwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLW1lbnVcIiAqbmdJZj1cImNvbHVtbi5pc1NlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgW3RleHRDb250ZW50XT1cIidDT0xVTU5fT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImhpZGVDb2x1bW4oY29sdW1uKVwiPkhpZGUgQ29sdW1uPC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbiwgY29sdW1uLmZpZWxkKVwiPlNvcnQgQ29sdW1uPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cInJlc2l6YWJsZSAmJiBjb2x1bW4ucmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1zaXplclwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJoYW5kbGVTaXplck1vdXNlRG93bigkZXZlbnQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dHcmlkU2V0dGluZ3NcIiBjbGFzcz1cImdyaWQtc2V0dGluZ3NcIj5cclxuICAgICAgICA8Y28tYnV0dG9uXHJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZXR0aW5nc01lbnVPcGVuXCJcclxuICAgICAgICAgIFtpY29uRGF0YV09XCJpY29ucy5nZXRJY29uKEljb25zLkNvZ1doZWVscylcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNldHRpbmdzTWVudSgpXCI+XHJcbiAgICAgICAgPC9jby1idXR0b24+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tZW51XCIgKm5nSWY9XCJpc1NldHRpbmdzTWVudU9wZW5cIj5cclxuICAgICAgICAgIDxoMyBbdGV4dENvbnRlbnRdPVwiJ0dSSURfT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGkgKGNsaWNrKT1cImV4cG9ydFRvRXhjZWwoKVwiPkV4cG9ydCB0byBFeGNlbDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImhlYWRlckNvbHVtbnNDb3B5Lmxlbmd0aCAhPT0gaGVhZGVyQ29sdW1ucy5sZW5ndGhcIiAoY2xpY2spPVwic2hvd0FsbENvbHVtbnMoKVwiPlxyXG4gICAgICAgICAgICAgIFNob3cgQWxsIENvbHVtbnNcclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHlcclxuICAgICAgICAjZHJvcExpc3QgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWRyYWctZHJvcC1saXN0XCJcclxuICAgICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ0Ryb3BFbmFibGVkIHx8IGVkaXRpbmdcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiaGFuZGxlQ2FuRHJhZ0Ryb3BcIlxyXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiaGFuZGxlRHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgIDxjby1mb3JtIGNsYXNzPVwic2ltcGxlLWdyaWQtcm93LWZvcm1cIj5cclxuICAgICAgICA8dHJcclxuICAgICAgICAgICNyb3dFbGVtZW50XHJcbiAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLXJvd1wiXHJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwicm93SW5kZXggPT09IHNlbGVjdGVkUm93SW5kZXggJiYgIWVkaXRpbmdcIiBvYnNlcnZlVmlzaWJpbGl0eVxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImdldElzUm93RGlzYWJsZWQocm93SW5kZXgpXCJcclxuICAgICAgICAgIFtjbGFzcy5lZGl0aW5nXT1cInJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiAoISFyb3dzUGVyUGFnZSA/IChkYXRhIHwgcGFnaW5hdGU6IHtpdGVtc1BlclBhZ2U6IHJvd3NQZXJQYWdlLCBjdXJyZW50UGFnZTogY3VycmVudFBhZ2V9KSA6IGRhdGEpOyBsYXN0IGFzIGxhc3Q7IGxldCByb3dJbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgIGNka0RyYWdcclxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4KVwiIChkYmxjbGljayk9XCJoYW5kbGVEYmxDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4LCByb3cpXCJcclxuICAgICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cInJvd1Zpc2libGUubmV4dChyb3cpXCJcclxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRSb3dJbmRleCA9IHJvd0luZGV4XCJcclxuICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRSb3dJbmRleCA9IC0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaW5nbGVDb2x1bW5Sb3cocm93KVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1zaW5nbGUtY29sdW1uLWNlbGxcIiBbYXR0ci5jb2xzcGFuXT1cImhlYWRlckNvbHVtbnNDb3B5Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jZWxsXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtbnNbc2luZ2xlQ29sdW1uSW5kZXgocm93KV1cIlxyXG4gICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jZWxsPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2luZ2xlQ29sdW1uUm93KHJvdylcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGhlYWRlckNvbHVtbnNDb3B5OyBsZXQgY29sdW1uSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1jZWxsXCIgKm5nSWY9XCJjb2x1bW5JbmRleCAhPT0gc2luZ2xlQ29sdW1uSW5kZXgocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgPGNvLXNpbXBsZS1ncmlkLWNlbGxcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgIFtlZGl0TW9kZV09XCJpbmxpbmVFZGl0ICYmIGVkaXRpbmcgJiYgcm93SW5kZXggPT09IGVkaXRSb3dJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZEVkaXRNb2RlXT1cImVkaXRDZWxsSW5kZXggPT09IGNvbHVtbkluZGV4ICYmIHJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsaWNrKT1cImhhbmRsZUNlbGxDbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5yZXNpemFibGVcIiBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1zaXplci1wbGFjZWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Jvd0J1dHRvbnNcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpY29ucy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2hvdy1jb250ZW50XT1cInNlbGVjdGVkUm93SW5kZXggPT09IHJvd0luZGV4IHx8IGhvdmVyZWRSb3dJbmRleCA9PT0gcm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwiaWNvbi1pdGVtIGljb24tZWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdFJvd0luZGV4ICE9PSByb3dJbmRleCAmJiBpbmxpbmVFZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25zLmdldEljb24oSWNvbnMuUGVuVG9TcXVhcmVTb2xpZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFJvdygkZXZlbnQsIHRydWUsIHJvd0luZGV4KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cImljb24taXRlbSBpY29uLWRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29ucy5nZXRJY29uKEljb25zLlRyYXNoQmluKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGVkaXRSb3dJbmRleCAhPT0gcm93SW5kZXggJiYgc2hvd0RlbGV0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUm93KGRhdGFbcm93SW5kZXhdKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmcgJiYgaW5saW5lRWRpdCAmJiAoc2VsZWN0ZWRSb3dJbmRleCA9PT0gcm93SW5kZXggfHwgaXNOZXdSb3cpICYmIGVkaXRSb3dJbmRleCA9PT0gcm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5DaGVja0R1b3RvbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVBbmRTYXZlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Dcm9zc1NraW5ueSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxFZGl0Um93KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSBcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9jby1mb3JtPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxjby1wYWdpbmF0aW9uLWJhclxyXG4gICAgICAqbmdJZj1cImRhdGE/Lmxlbmd0aCA+IHJvd3NQZXJQYWdlXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJhclwiXHJcbiAgICAgIFtpdGVtc1BlclBhZ2VdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICBbdG90YWxJdGVtc109XCJkYXRhLmxlbmd0aFwiXHJcbiAgICAgIFthdXRvSGlkZV09XCJ0cnVlXCJcclxuICAgICAgKHByZXZpb3VzQ2xpY2spPVwiZ29Ub1ByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgKG5leHRDbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiXHJcbiAgICAgIChwYWdlQ2xpY2spPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9jby1wYWdpbmF0aW9uLWJhcj5cclxuICBgLFxyXG4gIHByb3ZpZGVyczogW0Zvcm1NYXN0ZXJTZXJ2aWNlXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2ltcGxlR3JpZENvbXBvbmVudCBleHRlbmRzIEJhc2VTaW1wbGVHcmlkQ29tcG9uZW50IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFRleHRBbGlnbjogQ29sdW1uQWxpZ24gPSBDb2x1bW5BbGlnbi5MZWZ0O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdoZWFkZXJDZWxsJykgc2V0IGhlYWRlckNlbGxzKGNlbGxzKSB7XHJcbiAgICBjb25zdCBoZWFkZXJFbGVtZW50cyA9IGNlbGxzLnRvQXJyYXkoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jb2x1bW5zW2ldLmVsZW1lbnRSZWYgPSBoZWFkZXJFbGVtZW50c1tpXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Jvd0VsZW1lbnQnKSByb3dFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVzZWxlY3RBbGxvd2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGVkaXRPbkNlbGxDbGljazogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJpZ2h0VG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93R3JpZFNldHRpbmdzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJvd3NQZXJQYWdlOiBudW1iZXIgPSA1MDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93RGlzYWJsZWRGbjogRnVuY3Rpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dDb2x1bW5Tb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dSb3dCdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb21pc2UgZnVuY3Rpb24sIGlmIHByb3ZpZGVkIHNob3VsZCByZXR1cm4gYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblJvd0JlRWRpdHRlZEZuOiBGdW5jdGlvbjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1zaW1wbGUtZ3JpZCcpXHJcbiAgcHVibGljIHNob3dDbGFzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQoIWV2ZW50LnNoaWZ0S2V5LCB0aGlzLmVkaXRDZWxsSW5kZXgpXHJcbiAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5jYW5jZWxFZGl0Um93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2V0dGluZ3NNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlZGl0Um93SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBlZGl0Q2VsbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJvd1RvRWRpdDogYW55O1xyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgc29ydENvbHVtblZhbHVlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIGhvdmVyZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJlYWRvbmx5IEljb25zID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG5cclxuICBwcml2YXRlIF9kb3VibGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93UmVmZXJlbmNlOiBhbnk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBJY29uQ2FjaGVTZXJ2aWNlID0gSWNvbkNhY2hlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29yZUNvbXBvbmVudHNJY29uID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uczogSWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfZm9ybU1hc3RlcjogRm9ybU1hc3RlclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNoYW5nZURldGVjdGlvbik7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tPdXRzaWRlUm93KCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc1Jvd0Rpc2FibGVkKGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFJvd3MuaW5kZXhPZihpZHgpID4gLTE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaXNSb3dEaXNhYmxlZChyb3c6IGFueSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMucm93RGlzYWJsZWRGbiAmJiAodHlwZW9mIHRoaXMucm93RGlzYWJsZWRGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgY29uc3QgZGlzYWJsZWQgPSBhd2FpdCB0aGlzLnJvd0Rpc2FibGVkRm4uY2FsbCh0aGlzLCByb3cpO1xyXG4gICAgICBjb25zdCBpZHhSb3c6IG51bWJlciA9IHRoaXMuZGlzYWJsZWRSb3dzLmluZGV4T2YoaW5kZXgpO1xyXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICBpZiAoaWR4Um93IDwgMCkge1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlZFJvd3MucHVzaChpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpZHhSb3cgPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlZFJvd3Muc3BsaWNlKGlkeFJvdywgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkaXNhYmxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhZGROZXdSb3coKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5fbmV3Um93UmVmZXJlbmNlID0ge307XHJcbiAgICAgICAgdGhpcy5kYXRhLnB1c2godGhpcy5fbmV3Um93UmVmZXJlbmNlKTtcclxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5fbmV3Um93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb3dzUGVyUGFnZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gdGhpcy5yb3dzUGVyUGFnZSkge1xyXG4gICAgICAgICAgLy8gbmF2aWdhdGUgdG8gbGFzdCBwYWdlXHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gTWF0aC5jZWlsKHRoaXMuZGF0YS5sZW5ndGggLyB0aGlzLnJvd3NQZXJQYWdlKTtcclxuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlSW5kZXg6IG51bWJlciA9ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkgJSB0aGlzLnJvd3NQZXJQYWdlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gcmVsYXRpdmVJbmRleDtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gcmVsYXRpdmVJbmRleDtcclxuXHJcbiAgICAgICAgICAvLyBzdG9yZSByZWZlcmVuY2VcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5fbmV3Um93UmVmZXJlbmNlO1xyXG4gICAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gYXdhaXQgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy5yb3dFbGVtZW50cz8ubGFzdD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDIwMCk7XHJcblxyXG4gICAgICAgICAgLy8gcmVzZXQgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcm93IGFmdGVyIGVkaXRDZWxsSW5kZXhcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5fbmV3Um93UmVmZXJlbmNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLl9uZXdSb3dSZWZlcmVuY2U7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRSb3cubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRSb3cubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlQW5kU2F2ZShzdG9wZWRpdGluZzogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb3JtTWFzdGVyLnN1Ym1pdFNsYXZlcygpO1xyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX3NhdmVSb3coc3RvcGVkaXRpbmcpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0Um93KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVkaXRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX25ld1Jvdykge1xyXG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKHRoaXMuZGF0YS5sZW5ndGggLSAxLCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF0gPSB0aGlzLnJvd1RvRWRpdDtcclxuICAgIH1cclxuICAgIHRoaXMuX3Jlc2V0RWRpdCgpO1xyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVJvdyhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWxldGVSb3cubmV4dChyb3cpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRSb3coKTogdm9pZCB7XHJcbiAgICBsZXQgYWJzb2x1dGVJbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMucm93c1BlclBhZ2UpIHtcclxuICAgICAgYWJzb2x1dGVJbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgdGhpcy5zZWxlY3RlZFJvd0luZGV4O1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWxldGVSb3cubmV4dCh0aGlzLmRhdGFbYWJzb2x1dGVJbmRleF0pO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlubGluZUVkaXQgJiYgdGhpcy5zaG93Um93QnV0dG9ucyAmJiAhdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RvdWJsZUNsaWNrZWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgpO1xyXG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXQgJiYgIXRoaXMuc2hvd1Jvd0J1dHRvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvdyhldmVudCwgdHJ1ZSwgaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RUaGVSb3coaW5kZXg6IG51bWJlciwgZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93SW5kZXggPT09IC0xIHx8ICh0aGlzLnNlbGVjdGVkUm93SW5kZXggIT09IGluZGV4ICYmICgodGhpcy5lZGl0aW5nICYmIHRoaXMudmFsaWRhdGVBbmRTYXZlKCkpIHx8ICF0aGlzLmVkaXRpbmcpKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgY29uc3QgYWJzb2x1dGVJbmRleDogbnVtYmVyID0gdGhpcy5yb3dzUGVyUGFnZSA/ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgaW5kZXggOiBpbmRleDtcclxuICAgICAgaWYgKGVtaXQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFJvdy5uZXh0KHRoaXMuZGF0YVthYnNvbHV0ZUluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd0luZGV4ID09PSBpbmRleCAmJiB0aGlzLmRlc2VsZWN0QWxsb3dlZCAmJiAoKHRoaXMuZWRpdGluZyAmJiB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpKSB8fCAhdGhpcy5lZGl0aW5nKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgaWYgKGVtaXQpIHtcclxuICAgICAgICB0aGlzLmRlc2VsZWN0Um93Lm5leHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZURibENsaWNrUm93KGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIGluZGV4KSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbkVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gJiYgdHlwZW9mIHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2FuRWRpdCA9IGF3YWl0IHRoaXMuY2FuUm93QmVFZGl0dGVkRm4uY2FsbCh0aGlzLCByb3cpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhbkVkaXQpIHtcclxuICAgICAgdGhpcy5fZG91YmxlQ2xpY2tlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGJsQ2xpY2tSb3cubmV4dCh0aGlzLmRhdGFbaW5kZXhdKTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCAmJiAhdGhpcy5zaG93Um93QnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvdyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3Jlc2V0RGJsQ2xpY2soKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlZGl0Um93KGV2ZW50OiBNb3VzZUV2ZW50LCBzZWxlY3RDZWxsOiBib29sZWFuID0gdHJ1ZSwgcm93SW5kZXg/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhlUm93KHJvd0luZGV4KTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleDtcclxuICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93Um93QnV0dG9ucyAmJiB0aGlzLmlubGluZUVkaXQgJiYgc2VsZWN0Q2VsbCkge1xyXG4gICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVDZWxsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9uQ2VsbENsaWNrKSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCByb3dJbmRleCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gY2VsbEluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTZXR0aW5nc01lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9ICF0aGlzLmlzU2V0dGluZ3NNZW51T3BlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDb2x1bW5NZW51KGNvbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0dyaWRTZXR0aW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChjb2wuaXNTZWxlY3RlZCkge1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUNvbHVtbihjb2w6IGFueSk6IHZvaWQge1xyXG4gICAgY29sLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZpbHRlcigob2JqKSA9PiB7XHJcbiAgICAgIHJldHVybiBvYmogIT09IGNvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDb2x1bW4oY29sOiBhbnksIGNvbHVtblZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbC5pc1NlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydENvbHVtblZhbHVlID09PSBjb2x1bW5WYWx1ZSkge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bW5WYWx1ZSA9IGNvbHVtblZhbHVlO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLmRhdGFdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgbGV0IHZhbEEgPSBhW2NvbHVtblZhbHVlXTtcclxuICAgICAgbGV0IHZhbEIgPSBiW2NvbHVtblZhbHVlXTtcclxuXHJcbiAgICAgIGlmICh2YWxBID09IG51bGwgJiYgdmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKiBkaXJlY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhbmRsZSBJU08gZGF0ZSBzdHJpbmdcclxuICAgICAgY29uc3QgaXNEYXRlQSA9IHR5cGVvZiB2YWxBID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxBKTtcclxuICAgICAgY29uc3QgaXNEYXRlQiA9IHR5cGVvZiB2YWxCID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxCKTtcclxuXHJcbiAgICAgIGlmIChpc0RhdGVBICYmIGlzRGF0ZUIpIHtcclxuICAgICAgICBjb25zdCB0aW1lQSA9IG5ldyBEYXRlKHZhbEEpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lQiA9IG5ldyBEYXRlKHZhbEIpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gKHRpbWVBIC0gdGltZUIpICogZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGYWxsYmFjayBmb3IgbnVtYmVycy9zdHJpbmdzXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsQSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbEIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbEEubG9jYWxlQ29tcGFyZSh2YWxCKSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh2YWxBID4gdmFsQiA/IDEgOiB2YWxBIDwgdmFsQiA/IC0xIDogMCkgKiBkaXJlY3Rpb247XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhdGEgPSBzb3J0ZWQ7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FsbENvbHVtbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weSA9IHRoaXMuaGVhZGVyQ29sdW1ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIGNvbnN0IGV4cG9ydERhdGE6IE9iamVjdFtdID0gdGhpcy5leHBvcnREYXRhLmxlbmd0aCA+IDAgPyB0aGlzLl9maWx0ZXJTZWxlY3RlZE9yUmV0dXJuQWxsKHRoaXMuZXhwb3J0RGF0YSkgOiB0aGlzLl9maWx0ZXJTZWxlY3RlZE9yUmV0dXJuQWxsKHRoaXMuZGF0YSk7XHJcbiAgICBjb25zdCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSA9IHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkubWFwKGNvbHVtbiA9PiB7XHJcbiAgICAgIHJldHVybiAoe1xyXG4gICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlclRleHRcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gY29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXIpO1xyXG4gICAgY29uc3Qgcm93cyA9IGV4cG9ydERhdGEubWFwKHJvdyA9PlxyXG4gICAgICBjb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbC5rZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB2YWx1ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBmb3JtYXR0ZWREYXRlLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICByZXR1cm4gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbnN0IGhhc0RlY2ltYWwgPSAobnVtKSA9PiAhTnVtYmVyLmlzSW50ZWdlcihudW0pO1xyXG4gICAgICAgICAgcmV0dXJuIGhhc0RlY2ltYWwodmFsdWUpID8gdmFsdWUudG9GaXhlZCgyKSA6IHZhbHVlLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJywgJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5pbmNsdWRlcygnVDAwOjAwOjAwJykpIHtcclxuICAgICAgICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUucmVwbGFjZSgnVDAwOjAwOjAwJywgJycpLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtkYXl9LSR7bW9udGh9LSR7eWVhcn1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjb25zdCBjc3ZDb250ZW50ID0gW2hlYWRlcnMsIC4uLnJvd3NdLm1hcChyb3cgPT5cclxuICAgIC8vICAgcm93Lm1hcChjZWxsID0+IGBcIiR7Y2VsbC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCkuam9pbignLCcpXHJcbiAgICAvLyApLmpvaW4oJ1xcclxcbicpO1xyXG5cclxuICAgIGNvbnN0IGNzdkNvbnRlbnQ6IHN0cmluZyA9IFtoZWFkZXJzLCAuLi5yb3dzXS5tYXAocm93ID0+XHJcbiAgICAgIHJvdy5tYXAoKGNlbGw6IHN0cmluZykgPT4gYFwiJHtTdHJpbmcoY2VsbCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImApLmpvaW4oJywnKVxyXG4gICAgKS5qb2luKCdcXHJcXG4nKTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7dHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7J30pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ0V4Y2VsU2hlZXQnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG5cclxuICAgIC8vIHRoaXMuZXhjZWxFeHBvcnRTZXJ2aWNlLmV4cG9ydFRvRXhjZWwoXHJcbiAgICAvLyAgIHRoaXMuZGF0YSxcclxuICAgIC8vICAgY29sdW1ucyxcclxuICAgIC8vICAgJ0V4Y2VsU2hlZXQnLFxyXG4gICAgLy8gICAnU2hlZXQxJ1xyXG4gICAgLy8gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSAtPSAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9OZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgKz0gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDdXJyZW50UGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc05ld1JvdygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXdSb3c7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJTZWxlY3RlZE9yUmV0dXJuQWxsKGl0ZW1zOiBhbnkpIHtcclxuICAgIGNvbnN0IGhhc1NlbGVjdGVkVHJ1ZTogYm9vbGVhbiA9IGl0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLnNlbGVjdGVkID09PSB0cnVlKTtcclxuICAgIHJldHVybiBoYXNTZWxlY3RlZFRydWUgPyBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkID09PSB0cnVlKSA6IGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFzeW5jIHByZXBhcmVEYXRhUm93KHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldERibENsaWNrKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2RvdWJsZUNsaWNrZWQgPSBmYWxzZTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBuZXh0OyBNb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgY2VsbFxyXG4gICAqIEBwYXJhbSBzdGFydDsgU3RhcnQgZnJvbSBjZWxsaW5kZXhcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX25leHRBdmFpbGFibGVDZWxsVG9FZGl0KG5leHQ6IGJvb2xlYW4sIHN0YXJ0OiBudW1iZXIgPSAtMSk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IG51bUVkaXRhYmxlQ29sdW1uczogbnVtYmVyID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnJlYWRvbmx5KS5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHdhbnRlZEluZGV4ID0gc3RhcnQgKyAobmV4dCA/IDEgOiAtMSk7XHJcbiAgICAgIGlmICh3YW50ZWRJbmRleCA+PSBudW1FZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLl9nZXROZXh0RWRpdFJvd0luZGV4KClcclxuICAgICAgICAgIC50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZ2V0TmV4dEVkaXRDZWxsSW5kZXgoMCkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHdhbnRlZEluZGV4IDwgMCkge1xyXG4gICAgICAgIHRoaXMuX2dldFByZXZpb3VzRWRpdFJvd0luZGV4KClcclxuICAgICAgICAgIC50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXh0ID8gdGhpcy5fZ2V0TmV4dEVkaXRDZWxsSW5kZXgoc3RhcnQgKyAxKSA6IHRoaXMuX2dldFByZXZpb3VzRWRpdENlbGxJbmRleChzdGFydCAtIDEpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXROZXh0RWRpdENlbGxJbmRleChzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0OyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ldLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFByZXZpb3VzRWRpdENlbGxJbmRleChzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoIXRoaXMuY29sdW1uc1tpXS5yZWFkb25seSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXROZXh0RWRpdFJvd0luZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGxldCBuZXdSb3dJbmRleDogbnVtYmVyID0gMDtcclxuICAgICAgaWYgKHRoaXMuZWRpdFJvd0luZGV4ICsgMSA+PSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0FkZFJvdykge1xyXG4gICAgICAgICAgdGhpcy5hZGROZXdSb3coKTtcclxuICAgICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ld1Jvd0luZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1Jvd0luZGV4ICE9PSB0aGlzLmVkaXRSb3dJbmRleCkgeyAvLyBnbyB0byBkaWZmZXJlbnQgcm93IHZhbGlkYXRlIGN1cnJlbnQgb25lIGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVBbmRTYXZlKGZhbHNlKSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLmRhdGFbbmV3Um93SW5kZXhdO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQcmV2aW91c0VkaXRSb3dJbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBsZXQgbmV3Um93SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRSb3dJbmRleCAtIDEgPCAwKSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4IC0gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3Um93SW5kZXggIT09IHRoaXMuZWRpdFJvd0luZGV4KSB7IC8vIGdvIHRvIGRpZmZlcmVudCByb3cgdmFsaWRhdGUgY3VycmVudCBvbmUgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUFuZFNhdmUoZmFsc2UpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVtuZXdSb3dJbmRleF07XHJcbiAgICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NhdmVSb3coc3RvcGVkaXRpbmc6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fbmV3Um93KSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJvdy5uZXh0KHRoaXMuX25ld1Jvd1JlZmVyZW5jZSk7XHJcbiAgICAgIHRoaXMuX25ld1Jvd1JlZmVyZW5jZSA9IG51bGw7IC8vIGNsZWFyXHJcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCd9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7IC8vIGV4aXN0aW5nIHJvd1xyXG5cclxuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2UpIHtcclxuICAgICAgICBpbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgdGhpcy5lZGl0Um93SW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlUm93Lm5leHQodGhpcy5kYXRhW2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX25ld1JvdyA9IGZhbHNlO1xyXG4gICAgaWYgKHN0b3BlZGl0aW5nKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0RWRpdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0RWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX25ld1JvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRSb3dJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMucm93VG9FZGl0ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
|