ngx-edu-sharing-ui 0.7.0 → 9.0.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/assets/scss/mixins.scss +4 -1
- package/assets/scss/variables.scss +3 -0
- package/esm2022/lib/actionbar/actionbar.component.mjs +188 -0
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +134 -0
- package/esm2022/lib/directives/border-box-observer.directive.mjs +71 -0
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +65 -0
- package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +14 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +79 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +49 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +105 -0
- package/esm2022/lib/directives/focus-state.directive.mjs +44 -0
- package/esm2022/lib/directives/icon.directive.mjs +139 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +70 -0
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +41 -0
- package/esm2022/lib/edu-sharing-ui.module.mjs +78 -0
- package/esm2022/lib/list-items/available-widgets.mjs +27 -0
- package/esm2022/lib/list-items/format-duration.pipe.mjs +20 -0
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +46 -0
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +29 -0
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +54 -0
- package/esm2022/lib/list-items/list-items.module.mjs +50 -0
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +41 -0
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +47 -0
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +24 -0
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +106 -0
- package/esm2022/lib/list-items/list-widget.mjs +49 -0
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +24 -0
- package/esm2022/lib/list-items/node-source.pipe.mjs +49 -0
- package/esm2022/lib/node-entries/combined-data-source.mjs +41 -0
- package/esm2022/lib/node-entries/custom-templates-data-source.mjs +7 -0
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +21 -0
- package/esm2022/lib/node-entries/entries-model.mjs +23 -0
- package/esm2022/lib/node-entries/items-cap.mjs +47 -0
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +34 -0
- package/esm2022/lib/node-entries/node-cache.mjs +65 -0
- package/esm2022/lib/node-entries/node-data-source-remote.mjs +4 -0
- package/esm2022/lib/node-entries/node-data-source.mjs +115 -0
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +131 -0
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +307 -0
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +45 -0
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +23 -0
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +58 -0
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +42 -0
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +290 -0
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +11 -0
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +324 -0
- package/esm2022/lib/node-entries/node-entries.component.mjs +131 -0
- package/esm2022/lib/node-entries/node-entries.module.mjs +161 -0
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +102 -0
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +48 -0
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +36 -0
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +62 -0
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +53 -0
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +41 -0
- package/esm2022/lib/node-url/node-url.component.mjs +128 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +31 -0
- package/esm2022/lib/pipes/format-date.pipe.mjs +38 -0
- package/esm2022/lib/pipes/node-icon.pipe.mjs +18 -0
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +24 -0
- package/esm2022/lib/pipes/node-image.pipe.mjs +55 -0
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +50 -0
- package/esm2022/lib/pipes/node-title.pipe.mjs +19 -0
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +33 -0
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +29 -0
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +19 -0
- package/esm2022/lib/services/abstract/app.service.mjs +3 -0
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +10 -0
- package/esm2022/lib/services/abstract/options-helper.service.mjs +3 -0
- package/esm2022/lib/services/abstract/toast.service.mjs +3 -0
- package/esm2022/lib/services/accessibility.service.mjs +73 -0
- package/esm2022/lib/services/local-events.service.mjs +36 -0
- package/esm2022/lib/services/node-entries.service.mjs +137 -0
- package/esm2022/lib/services/node-helper.service.mjs +234 -0
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +155 -0
- package/esm2022/lib/services/options-helper-data.service.mjs +134 -0
- package/esm2022/lib/services/repo-url.service.mjs +49 -0
- package/esm2022/lib/services/temporary-storage.service.mjs +48 -0
- package/esm2022/lib/services/ui.service.mjs +162 -0
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +50 -0
- package/esm2022/lib/spinner/spinner.component.mjs +18 -0
- package/esm2022/lib/translations/fallback-translation-handler.mjs +6 -0
- package/esm2022/lib/translations/languages.mjs +5 -0
- package/esm2022/lib/translations/translation-loader.mjs +149 -0
- package/esm2022/lib/translations/translation-source.mjs +11 -0
- package/esm2022/lib/translations/translations.module.mjs +67 -0
- package/esm2022/lib/translations/translations.service.mjs +171 -0
- package/esm2022/lib/types/accessibillity.mjs +19 -0
- package/esm2022/lib/types/api-models.mjs +2 -0
- package/esm2022/lib/types/drag-drop.mjs +2 -0
- package/esm2022/lib/types/keyboard-shortcuts.mjs +11 -0
- package/esm2022/lib/types/list-item.mjs +41 -0
- package/esm2022/lib/types/option-item.mjs +174 -0
- package/esm2022/lib/types/workflow.mjs +25 -0
- package/esm2022/lib/util/DateHelper.mjs +200 -0
- package/esm2022/lib/util/VCard.mjs +278 -0
- package/esm2022/lib/util/color-helper.mjs +124 -0
- package/esm2022/lib/util/duration-helper.mjs +102 -0
- package/esm2022/lib/util/functions.mjs +13 -0
- package/esm2022/lib/util/helper.mjs +64 -0
- package/esm2022/lib/util/isNumeric.mjs +11 -0
- package/esm2022/lib/util/rest-helper.mjs +33 -0
- package/esm2022/lib/util/ui-animation.mjs +146 -0
- package/esm2022/lib/util/ui-constants.mjs +21 -0
- package/esm2022/module.mjs +76 -0
- package/esm2022/ngx-edu-sharing-ui.mjs +5 -0
- package/fesm2022/ngx-edu-sharing-ui.mjs +6509 -0
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/actionbar/actionbar.component.d.ts +74 -0
- package/lib/common/edu-sharing-ui-common.module.d.ts +32 -0
- package/lib/directives/border-box-observer.directive.d.ts +31 -0
- package/lib/directives/check-text-overflow.directive.d.ts +20 -0
- package/lib/directives/drag-nodes/drag-nodes.d.ts +16 -0
- package/lib/directives/drag-nodes/nodes-drag-source.directive.d.ts +37 -0
- package/lib/directives/drag-nodes/nodes-drag.directive.d.ts +17 -0
- package/lib/directives/drag-nodes/nodes-drop-target.directive.d.ts +22 -0
- package/lib/directives/focus-state.directive.d.ts +14 -0
- package/lib/directives/icon.directive.d.ts +46 -0
- package/lib/dropdown/dropdown.component.d.ts +40 -0
- package/lib/edu-sharing-ui-configuration.d.ts +11 -0
- package/lib/edu-sharing-ui.module.d.ts +19 -0
- package/lib/list-items/available-widgets.d.ts +13 -0
- package/lib/list-items/format-duration.pipe.d.ts +10 -0
- package/lib/list-items/list-base/list-base.component.d.ts +18 -0
- package/lib/list-items/list-collection-info/list-collection-info.component.d.ts +14 -0
- package/lib/list-items/list-counts/list-counts.component.d.ts +13 -0
- package/lib/list-items/list-items.module.d.ts +20 -0
- package/lib/list-items/list-node-license/list-node-license.component.d.ts +20 -0
- package/lib/list-items/list-node-replication-source/list-node-replication-source.component.d.ts +22 -0
- package/lib/list-items/list-node-workflow/list-node-workflow.component.d.ts +12 -0
- package/lib/list-items/list-text/list-text.component.d.ts +28 -0
- package/lib/list-items/list-widget.d.ts +32 -0
- package/lib/list-items/node-row/node-row.component.d.ts +12 -0
- package/lib/list-items/node-source.pipe.d.ts +16 -0
- package/lib/node-entries/combined-data-source.d.ts +19 -0
- package/{src/lib/node-entries/custom-templates-data-source.ts → lib/node-entries/custom-templates-data-source.d.ts} +2 -2
- package/lib/node-entries/drag-preview/drag-preview.component.d.ts +11 -0
- package/{src/lib/node-entries/entries-model.ts → lib/node-entries/entries-model.d.ts} +19 -47
- package/lib/node-entries/items-cap.d.ts +17 -0
- package/lib/node-entries/list-item-label.pipe.d.ts +14 -0
- package/lib/node-entries/node-cache.d.ts +17 -0
- package/{src/lib/node-entries/node-data-source-remote.ts → lib/node-entries/node-data-source-remote.d.ts} +2 -12
- package/lib/node-entries/node-data-source.d.ts +42 -0
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +45 -0
- package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +92 -0
- package/lib/node-entries/node-entries-card-small/node-entries-card-small.component.d.ts +23 -0
- package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +12 -0
- package/lib/node-entries/node-entries-global.service.d.ts +50 -0
- package/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.d.ts +17 -0
- package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +76 -0
- package/{src/lib/node-entries/node-entries-templates.service.ts → lib/node-entries/node-entries-templates.service.d.ts} +6 -9
- package/lib/node-entries/node-entries-wrapper.component.d.ts +129 -0
- package/lib/node-entries/node-entries.component.d.ts +32 -0
- package/lib/node-entries/node-entries.module.d.ts +43 -0
- package/lib/node-entries/node-rating/node-rating.component.d.ts +26 -0
- package/lib/node-entries/node-stats-badges/node-stats-badges.component.d.ts +17 -0
- package/lib/node-entries/node-type-badge/node-type-badge.component.d.ts +21 -0
- package/lib/node-entries/option-button/option-button.component.d.ts +11 -0
- package/lib/node-entries/preview-image/preview-image.component.d.ts +22 -0
- package/lib/node-entries/sort-select-panel/sort-select-panel.component.d.ts +16 -0
- package/lib/node-url/node-url.component.d.ts +51 -0
- package/lib/pipes/file-size.pipe.d.ts +10 -0
- package/lib/pipes/format-date.pipe.d.ts +21 -0
- package/lib/pipes/node-icon.pipe.d.ts +11 -0
- package/lib/pipes/node-image-size.pipe.d.ts +8 -0
- package/lib/pipes/node-image.pipe.d.ts +28 -0
- package/lib/pipes/node-person-name.pipe.d.ts +10 -0
- package/lib/pipes/node-title.pipe.d.ts +11 -0
- package/lib/pipes/option-tooltip.pipe.d.ts +12 -0
- package/lib/pipes/replace-chars.pipe.d.ts +10 -0
- package/lib/pipes/vcard-name.pipe.d.ts +10 -0
- package/{src/lib/services/abstract/app.service.ts → lib/services/abstract/app.service.d.ts} +1 -1
- package/lib/services/abstract/keyboard-shortcuts.service.d.ts +11 -0
- package/lib/services/abstract/options-helper.service.d.ts +10 -0
- package/{src/lib/services/abstract/toast.service.ts → lib/services/abstract/toast.service.d.ts} +1 -2
- package/lib/services/accessibility.service.d.ts +18 -0
- package/{src/lib/services/local-events.service.ts → lib/services/local-events.service.d.ts} +7 -10
- package/lib/services/node-entries.service.d.ts +69 -0
- package/lib/services/node-helper.service.d.ts +56 -0
- package/lib/services/nodes-drag-drop.service.d.ts +41 -0
- package/lib/services/options-helper-data.service.d.ts +75 -0
- package/lib/services/repo-url.service.d.ts +25 -0
- package/lib/services/temporary-storage.service.d.ts +35 -0
- package/lib/services/ui.service.d.ts +41 -0
- package/lib/sort-dropdown/sort-dropdown.component.d.ts +15 -0
- package/lib/spinner/spinner.component.d.ts +7 -0
- package/lib/translations/fallback-translation-handler.d.ts +4 -0
- package/lib/translations/languages.d.ts +4 -0
- package/lib/translations/translation-loader.d.ts +51 -0
- package/{src/lib/translations/translation-source.ts → lib/translations/translation-source.d.ts} +4 -4
- package/lib/translations/translations.module.d.ts +15 -0
- package/lib/translations/translations.service.d.ts +30 -0
- package/lib/types/accessibillity.d.ts +15 -0
- package/{src/lib/types/drag-drop.ts → lib/types/drag-drop.d.ts} +0 -3
- package/lib/types/keyboard-shortcuts.d.ts +10 -0
- package/lib/types/list-item.d.ts +55 -0
- package/lib/types/option-item.d.ts +236 -0
- package/lib/types/workflow.d.ts +14 -0
- package/lib/util/DateHelper.d.ts +44 -0
- package/lib/util/VCard.d.ts +66 -0
- package/lib/util/color-helper.d.ts +25 -0
- package/lib/util/duration-helper.d.ts +14 -0
- package/lib/util/functions.d.ts +4 -0
- package/lib/util/helper.d.ts +20 -0
- package/lib/util/isNumeric.d.ts +5 -0
- package/lib/util/rest-helper.d.ts +10 -0
- package/lib/util/ui-animation.d.ts +39 -0
- package/lib/util/ui-constants.d.ts +18 -0
- package/{src/module.ts → module.d.ts} +0 -4
- package/package.json +23 -9
- package/.browserslistrc +0 -16
- package/.eslintrc.json +0 -44
- package/karma.conf.js +0 -42
- package/ng-package.json +0 -10
- package/src/lib/actionbar/actionbar.component.html +0 -59
- package/src/lib/actionbar/actionbar.component.scss +0 -123
- package/src/lib/actionbar/actionbar.component.ts +0 -174
- package/src/lib/common/edu-sharing-ui-common.module.ts +0 -80
- package/src/lib/directives/border-box-observer.directive.ts +0 -75
- package/src/lib/directives/check-text-overflow.directive.ts +0 -61
- package/src/lib/directives/drag-nodes/drag-nodes.ts +0 -32
- package/src/lib/directives/drag-nodes/nodes-drag-source.directive.ts +0 -79
- package/src/lib/directives/drag-nodes/nodes-drag.directive.ts +0 -43
- package/src/lib/directives/drag-nodes/nodes-drop-target.directive.ts +0 -116
- package/src/lib/directives/focus-state.directive.ts +0 -34
- package/src/lib/directives/icon.directive.ts +0 -142
- package/src/lib/directives/nodes-drop-target-legacy.directive.ts +0 -155
- package/src/lib/dropdown/dropdown.component.html +0 -32
- package/src/lib/dropdown/dropdown.component.scss +0 -67
- package/src/lib/dropdown/dropdown.component.ts +0 -71
- package/src/lib/edu-sharing-ui-configuration.ts +0 -47
- package/src/lib/edu-sharing-ui.module.ts +0 -49
- package/src/lib/list-items/available-widgets.ts +0 -30
- package/src/lib/list-items/format-duration.pipe.ts +0 -17
- package/src/lib/list-items/list-base/list-base.component.html +0 -52
- package/src/lib/list-items/list-base/list-base.component.ts +0 -44
- package/src/lib/list-items/list-collection-info/list-collection-info.component.html +0 -48
- package/src/lib/list-items/list-collection-info/list-collection-info.component.scss +0 -8
- package/src/lib/list-items/list-collection-info/list-collection-info.component.ts +0 -24
- package/src/lib/list-items/list-counts/list-counts.component.html +0 -1
- package/src/lib/list-items/list-counts/list-counts.component.scss +0 -3
- package/src/lib/list-items/list-counts/list-counts.component.ts +0 -59
- package/src/lib/list-items/list-items.module.ts +0 -33
- package/src/lib/list-items/list-node-license/list-node-license.component.html +0 -8
- package/src/lib/list-items/list-node-license/list-node-license.component.ts +0 -47
- package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.html +0 -11
- package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.ts +0 -60
- package/src/lib/list-items/list-node-workflow/list-node-workflow.component.html +0 -3
- package/src/lib/list-items/list-node-workflow/list-node-workflow.component.ts +0 -21
- package/src/lib/list-items/list-text/list-text.component.html +0 -176
- package/src/lib/list-items/list-text/list-text.component.scss +0 -3
- package/src/lib/list-items/list-text/list-text.component.ts +0 -107
- package/src/lib/list-items/list-widget.ts +0 -52
- package/src/lib/list-items/node-row/node-row.component.html +0 -31
- package/src/lib/list-items/node-row/node-row.component.scss +0 -50
- package/src/lib/list-items/node-row/node-row.component.ts +0 -16
- package/src/lib/list-items/node-source.pipe.ts +0 -48
- package/src/lib/node-entries/combined-data-source.ts +0 -51
- package/src/lib/node-entries/drag-preview/drag-preview.component.html +0 -6
- package/src/lib/node-entries/drag-preview/drag-preview.component.scss +0 -35
- package/src/lib/node-entries/drag-preview/drag-preview.component.ts +0 -15
- package/src/lib/node-entries/items-cap.ts +0 -54
- package/src/lib/node-entries/list-item-label.pipe.ts +0 -28
- package/src/lib/node-entries/mixins.scss +0 -23
- package/src/lib/node-entries/node-cache.spec.ts +0 -199
- package/src/lib/node-entries/node-cache.ts +0 -81
- package/src/lib/node-entries/node-data-source.ts +0 -148
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.html +0 -167
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.scss +0 -28
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.ts +0 -132
- package/src/lib/node-entries/node-entries-card/node-entries-card.main.scss +0 -261
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.html +0 -205
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.scss +0 -181
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.ts +0 -361
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.html +0 -100
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.scss +0 -46
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.ts +0 -40
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.html +0 -23
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.scss +0 -58
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.ts +0 -16
- package/src/lib/node-entries/node-entries-global.service.ts +0 -79
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.html +0 -25
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.scss +0 -32
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.ts +0 -31
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.html +0 -270
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.scss +0 -169
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.ts +0 -333
- package/src/lib/node-entries/node-entries-wrapper.component.ts +0 -363
- package/src/lib/node-entries/node-entries.component.html +0 -33
- package/src/lib/node-entries/node-entries.component.scss +0 -13
- package/src/lib/node-entries/node-entries.component.ts +0 -151
- package/src/lib/node-entries/node-entries.module.ts +0 -93
- package/src/lib/node-entries/node-rating/node-rating.component.html +0 -53
- package/src/lib/node-entries/node-rating/node-rating.component.scss +0 -31
- package/src/lib/node-entries/node-rating/node-rating.component.ts +0 -105
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.html +0 -39
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.scss +0 -44
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.ts +0 -43
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.html +0 -31
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.scss +0 -5
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.ts +0 -36
- package/src/lib/node-entries/option-button/option-button.component.ts +0 -42
- package/src/lib/node-entries/preview-image/preview-image.component.html +0 -19
- package/src/lib/node-entries/preview-image/preview-image.component.scss +0 -31
- package/src/lib/node-entries/preview-image/preview-image.component.ts +0 -47
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.html +0 -27
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.scss +0 -9
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.ts +0 -26
- package/src/lib/node-url/node-url.component.html +0 -66
- package/src/lib/node-url/node-url.component.scss +0 -32
- package/src/lib/node-url/node-url.component.ts +0 -136
- package/src/lib/pipes/file-size.pipe.ts +0 -24
- package/src/lib/pipes/format-date.pipe.ts +0 -39
- package/src/lib/pipes/node-icon.pipe.ts +0 -11
- package/src/lib/pipes/node-image-size.pipe.ts +0 -18
- package/src/lib/pipes/node-image.pipe.ts +0 -71
- package/src/lib/pipes/node-person-name.pipe.ts +0 -41
- package/src/lib/pipes/node-title.pipe.ts +0 -12
- package/src/lib/pipes/option-tooltip.pipe.ts +0 -32
- package/src/lib/pipes/replace-chars.pipe.ts +0 -21
- package/src/lib/pipes/vcard-name.pipe.ts +0 -11
- package/src/lib/services/abstract/keyboard-shortcuts.service.ts +0 -10
- package/src/lib/services/abstract/options-helper.service.ts +0 -29
- package/src/lib/services/accessibility.service.ts +0 -101
- package/src/lib/services/node-entries.service.ts +0 -172
- package/src/lib/services/node-helper.service.ts +0 -239
- package/src/lib/services/nodes-drag-drop.service.ts +0 -165
- package/src/lib/services/options-helper-data.service.ts +0 -186
- package/src/lib/services/repo-url.service.ts +0 -46
- package/src/lib/services/temporary-storage.service.ts +0 -58
- package/src/lib/services/ui.service.ts +0 -182
- package/src/lib/sort-dropdown/sort-dropdown.component.html +0 -22
- package/src/lib/sort-dropdown/sort-dropdown.component.scss +0 -47
- package/src/lib/sort-dropdown/sort-dropdown.component.ts +0 -42
- package/src/lib/spinner/spinner.component.html +0 -14
- package/src/lib/spinner/spinner.component.scss +0 -141
- package/src/lib/spinner/spinner.component.ts +0 -12
- package/src/lib/translations/README.md +0 -44
- package/src/lib/translations/fallback-translation-handler.ts +0 -7
- package/src/lib/translations/languages.ts +0 -6
- package/src/lib/translations/translation-loader.spec.ts +0 -352
- package/src/lib/translations/translation-loader.ts +0 -189
- package/src/lib/translations/translations.module.ts +0 -49
- package/src/lib/translations/translations.service.spec.ts +0 -152
- package/src/lib/translations/translations.service.ts +0 -188
- package/src/lib/types/accessibillity.ts +0 -15
- package/src/lib/types/keyboard-shortcuts.ts +0 -29
- package/src/lib/types/list-item.ts +0 -67
- package/src/lib/types/option-item.ts +0 -247
- package/src/lib/types/workflow.ts +0 -35
- package/src/lib/util/DateHelper.spec.ts +0 -112
- package/src/lib/util/DateHelper.ts +0 -197
- package/src/lib/util/VCard.ts +0 -277
- package/src/lib/util/color-helper.ts +0 -125
- package/src/lib/util/duration-helper.spec.ts +0 -35
- package/src/lib/util/duration-helper.ts +0 -98
- package/src/lib/util/functions.ts +0 -15
- package/src/lib/util/helper.ts +0 -60
- package/src/lib/util/isNumeric.ts +0 -13
- package/src/lib/util/rest-helper.ts +0 -28
- package/src/lib/util/ui-animation.ts +0 -154
- package/src/lib/util/ui-constants.ts +0 -20
- package/src/test.ts +0 -28
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- /package/{src/lib/types/api-models.ts → lib/types/api-models.d.ts} +0 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { Component, ContentChild, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { NodeEntriesTemplatesService } from './node-entries-templates.service';
|
|
4
|
+
import { InteractionType, NodeEntriesDisplayType, } from './entries-model';
|
|
5
|
+
import { NodeDataSource } from './node-data-source';
|
|
6
|
+
import { Helper } from '../util/helper';
|
|
7
|
+
import { NodeEntriesService } from '../services/node-entries.service';
|
|
8
|
+
import { TemporaryStorageService } from '../services/temporary-storage.service';
|
|
9
|
+
import { OptionsHelperDataService } from '../services/options-helper-data.service';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../services/temporary-storage.service";
|
|
12
|
+
import * as i2 from "../services/node-entries.service";
|
|
13
|
+
import * as i3 from "../services/options-helper-data.service";
|
|
14
|
+
import * as i4 from "../services/node-helper.service";
|
|
15
|
+
import * as i5 from "../services/ui.service";
|
|
16
|
+
import * as i6 from "./node-entries-templates.service";
|
|
17
|
+
import * as i7 from "@angular/common";
|
|
18
|
+
import * as i8 from "./node-entries.component";
|
|
19
|
+
export class NodeEntriesWrapperComponent {
|
|
20
|
+
constructor(viewContainerRef, temporaryStorageService, ngZone, entriesService, optionsHelper, nodeHelperService, uiService,
|
|
21
|
+
// @TODO
|
|
22
|
+
// private mainNav: MainNavService,
|
|
23
|
+
templatesService, changeDetectorRef, elementRef) {
|
|
24
|
+
this.viewContainerRef = viewContainerRef;
|
|
25
|
+
this.temporaryStorageService = temporaryStorageService;
|
|
26
|
+
this.ngZone = ngZone;
|
|
27
|
+
this.entriesService = entriesService;
|
|
28
|
+
this.optionsHelper = optionsHelper;
|
|
29
|
+
this.nodeHelperService = nodeHelperService;
|
|
30
|
+
this.uiService = uiService;
|
|
31
|
+
this.templatesService = templatesService;
|
|
32
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
33
|
+
this.elementRef = elementRef;
|
|
34
|
+
this.checkbox = true;
|
|
35
|
+
this.columnsChange = new EventEmitter();
|
|
36
|
+
this.displayType = NodeEntriesDisplayType.Grid;
|
|
37
|
+
this.displayTypeChange = new EventEmitter();
|
|
38
|
+
this.elementInteractionType = InteractionType.DefaultActionLink;
|
|
39
|
+
/**
|
|
40
|
+
* UI hints for whether a single click will cause a dynamic action.
|
|
41
|
+
*
|
|
42
|
+
* This does not configure the actual behavior but only UI hints to the user. Hints include
|
|
43
|
+
* hover effects and a changed cursor.
|
|
44
|
+
*
|
|
45
|
+
* - When choosing 'static', the `clickItem` event should trigger some stationary action like
|
|
46
|
+
* selecting the element or displaying information in a complementary page area. The
|
|
47
|
+
* `dblClickItem` event can be used for a more disruptive action.
|
|
48
|
+
* - When choosing 'dynamic', the `clickItem` event should trigger a major action like
|
|
49
|
+
* navigating to a new page or closing a dialog.
|
|
50
|
+
*/
|
|
51
|
+
// TODO: Consider controlling the ui hints and the actual behavior with a single option.
|
|
52
|
+
this.singleClickHint = 'dynamic';
|
|
53
|
+
/**
|
|
54
|
+
* Do not load more data on scroll.
|
|
55
|
+
*/
|
|
56
|
+
this.disableInfiniteScroll = false;
|
|
57
|
+
this.fetchData = new EventEmitter();
|
|
58
|
+
this.clickItem = new EventEmitter();
|
|
59
|
+
this.dblClickItem = new EventEmitter();
|
|
60
|
+
this.sortChange = new EventEmitter();
|
|
61
|
+
this.destroyed = new Subject();
|
|
62
|
+
// regulary re-bind template since it might have updated without ngChanges trigger
|
|
63
|
+
/*
|
|
64
|
+
ngZone.runOutsideAngular(() =>
|
|
65
|
+
setInterval(() => this.componentRef.instance.emptyRef = this.emptyRef)
|
|
66
|
+
);
|
|
67
|
+
*/
|
|
68
|
+
this.virtualNodesAdded = this.optionsHelper.virtualNodesAdded;
|
|
69
|
+
this.displayTypeChanged = this.optionsHelper.displayTypeChanged;
|
|
70
|
+
this.entriesService.selection.changed.subscribe(() => {
|
|
71
|
+
if (this.optionsHelper.getData()) {
|
|
72
|
+
this.optionsHelper.getData().selectedObjects =
|
|
73
|
+
this.entriesService.selection.selected;
|
|
74
|
+
this.optionsHelper.getData().activeObjects = this.entriesService.selection.selected;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.warn('optionsHelper is not initalized correctly; data is empty');
|
|
78
|
+
}
|
|
79
|
+
this.optionsHelper.refreshComponents();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
ngOnInit() {
|
|
83
|
+
if (this.primaryInstance) {
|
|
84
|
+
this.optionsHelper.registerGlobalKeyboardShortcuts();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ngOnChanges(changes = {}) {
|
|
88
|
+
if (!this.componentRef) {
|
|
89
|
+
this.init();
|
|
90
|
+
}
|
|
91
|
+
this.entriesService.list = this;
|
|
92
|
+
this.entriesService.dataSource = this.dataSource;
|
|
93
|
+
this.entriesService.scope = this.scope;
|
|
94
|
+
this.entriesService.columns = this.columns;
|
|
95
|
+
this.entriesService.configureColumns = this.configureColumns;
|
|
96
|
+
this.entriesService.checkbox = this.checkbox;
|
|
97
|
+
this.entriesService.columnsChange = this.columnsChange;
|
|
98
|
+
this.entriesService.displayType = this.displayType;
|
|
99
|
+
this.entriesService.elementInteractionType = this.elementInteractionType;
|
|
100
|
+
this.entriesService.gridConfig = this.gridConfig;
|
|
101
|
+
this.entriesService.options = this.options;
|
|
102
|
+
this.entriesService.globalOptions = this.globalOptions;
|
|
103
|
+
this.entriesService.sort = this.sort;
|
|
104
|
+
this.entriesService.sortChange = this.sortChange;
|
|
105
|
+
this.entriesService.dragDrop = this.dragDrop;
|
|
106
|
+
this.entriesService.clickItem = this.clickItem;
|
|
107
|
+
this.entriesService.dblClickItem = this.dblClickItem;
|
|
108
|
+
this.entriesService.fetchData = this.fetchData;
|
|
109
|
+
this.entriesService.primaryInstance = this.primaryInstance;
|
|
110
|
+
this.entriesService.singleClickHint = this.singleClickHint;
|
|
111
|
+
this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;
|
|
112
|
+
if (changes['initConfig']) {
|
|
113
|
+
this.initOptionsGenerator(this.initConfig);
|
|
114
|
+
}
|
|
115
|
+
if (this.componentRef) {
|
|
116
|
+
this.componentRef.instance.changeDetectorRef?.detectChanges();
|
|
117
|
+
}
|
|
118
|
+
// This might need wrapping with `setTimeout`.
|
|
119
|
+
this.updateTemplates();
|
|
120
|
+
}
|
|
121
|
+
ngOnDestroy() {
|
|
122
|
+
this.destroyed.next();
|
|
123
|
+
this.destroyed.complete();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Replaces this wrapper with the configured custom-node-list component.
|
|
127
|
+
*/
|
|
128
|
+
init() {
|
|
129
|
+
this.customNodeListComponent = this.temporaryStorageService.get(TemporaryStorageService.CUSTOM_NODE_ENTRIES_COMPONENT, null);
|
|
130
|
+
if (this.customNodeListComponent == null) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.componentRef = this.uiService.injectAngularComponent(this.viewContainerRef, this.customNodeListComponent, this.elementRef.nativeElement,
|
|
134
|
+
// Input bindings are initialized in `ngOnChanges`.
|
|
135
|
+
this.getOutputBindings());
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Creates a simple map of the output bindings defined in this component.
|
|
139
|
+
*/
|
|
140
|
+
getOutputBindings() {
|
|
141
|
+
const outputBindings = {};
|
|
142
|
+
for (const key of Object.keys(this)) {
|
|
143
|
+
const value = this[key];
|
|
144
|
+
if (value instanceof EventEmitter) {
|
|
145
|
+
outputBindings[key] = value;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return outputBindings;
|
|
149
|
+
}
|
|
150
|
+
getDisplayType() {
|
|
151
|
+
return this.displayType;
|
|
152
|
+
}
|
|
153
|
+
setDisplayType(displayType) {
|
|
154
|
+
this.displayType = displayType;
|
|
155
|
+
this.entriesService.displayType = displayType;
|
|
156
|
+
this.ngOnChanges();
|
|
157
|
+
this.displayTypeChange.emit(displayType);
|
|
158
|
+
}
|
|
159
|
+
updateNodes(nodes) {
|
|
160
|
+
if (!nodes) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.dataSource.getData().forEach((d) => {
|
|
164
|
+
let hits = nodes.filter((n) => n.ref.id === d.ref.id);
|
|
165
|
+
if (hits.length === 0) {
|
|
166
|
+
// handle if the original has changed (for collection refs)
|
|
167
|
+
hits = nodes.filter((n) => n.ref.id === d.originalId);
|
|
168
|
+
}
|
|
169
|
+
if (hits.length === 1) {
|
|
170
|
+
this.nodeHelperService.copyDataToNode(d, hits[0]);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
// trigger rebuild
|
|
174
|
+
if (this.dataSource instanceof NodeDataSource) {
|
|
175
|
+
this.dataSource.refresh();
|
|
176
|
+
}
|
|
177
|
+
const oldSelection = this.entriesService.selection.selected;
|
|
178
|
+
this.entriesService.selection.clear();
|
|
179
|
+
this.entriesService.selection.select(...oldSelection.map((o) => this.dataSource.getData().filter((d) => Helper.objectEquals(o, d))?.[0]));
|
|
180
|
+
this.changeDetectorRef.detectChanges();
|
|
181
|
+
}
|
|
182
|
+
showReorderColumnsDialog() { }
|
|
183
|
+
addVirtualNodes(virtual) {
|
|
184
|
+
virtual = virtual.map((o) => {
|
|
185
|
+
o.virtual = true;
|
|
186
|
+
return o;
|
|
187
|
+
});
|
|
188
|
+
virtual.forEach((v) => {
|
|
189
|
+
const contains = this.dataSource
|
|
190
|
+
.getData()
|
|
191
|
+
.some((d) => d.ref
|
|
192
|
+
? d.ref?.id === v.ref?.id
|
|
193
|
+
: d.authorityName === v.authorityName);
|
|
194
|
+
if (contains) {
|
|
195
|
+
this.updateNodes([v]);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.dataSource.appendData([v], 'before');
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
this.entriesService.selection.clear();
|
|
202
|
+
this.entriesService.selection.select(...virtual);
|
|
203
|
+
this.virtualNodesAdded.emit(virtual);
|
|
204
|
+
this.changeDetectorRef.detectChanges();
|
|
205
|
+
}
|
|
206
|
+
setOptions(options) {
|
|
207
|
+
this.options = options;
|
|
208
|
+
this.ngOnChanges();
|
|
209
|
+
}
|
|
210
|
+
getSelection() {
|
|
211
|
+
return this.entriesService.selection;
|
|
212
|
+
}
|
|
213
|
+
async initOptionsGenerator(config) {
|
|
214
|
+
await this.optionsHelper.initComponents(config.actionbar, this);
|
|
215
|
+
this.optionsHelper.setData({
|
|
216
|
+
scope: this.entriesService.scope,
|
|
217
|
+
activeObjects: this.entriesService.selection.selected,
|
|
218
|
+
selectedObjects: this.entriesService.selection.selected,
|
|
219
|
+
allObjects: this.dataSource.getData(),
|
|
220
|
+
parent: config.parent,
|
|
221
|
+
customOptions: config.customOptions,
|
|
222
|
+
});
|
|
223
|
+
this.optionsHelper.refreshComponents();
|
|
224
|
+
}
|
|
225
|
+
ngAfterViewInit() {
|
|
226
|
+
// Prevent changed-after-checked error
|
|
227
|
+
Promise.resolve().then(() => this.updateTemplates());
|
|
228
|
+
}
|
|
229
|
+
updateTemplates() {
|
|
230
|
+
this.templatesService.title = this.titleRef;
|
|
231
|
+
this.templatesService.empty = this.emptyRef;
|
|
232
|
+
this.templatesService.actionArea = this.actionAreaRef;
|
|
233
|
+
this.templatesService.overlay = this.overlayRef;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* reset the pagination to the first page
|
|
237
|
+
* hint: this will do nothing in case the paginationStrategy !== Pagination
|
|
238
|
+
*/
|
|
239
|
+
resetPagination() {
|
|
240
|
+
this.nodeEntriesComponentRef?.paginator?.firstPage();
|
|
241
|
+
}
|
|
242
|
+
deleteNodes(objects) {
|
|
243
|
+
this.dataSource.removeData(objects);
|
|
244
|
+
this.getSelection().clear();
|
|
245
|
+
}
|
|
246
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesWrapperComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.TemporaryStorageService }, { token: i0.NgZone }, { token: i2.NodeEntriesService }, { token: i3.OptionsHelperDataService }, { token: i4.NodeHelperService }, { token: i5.UIService }, { token: i6.NodeEntriesTemplatesService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
247
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesWrapperComponent, selector: "es-node-entries-wrapper", inputs: { dataSource: "dataSource", scope: "scope", columns: "columns", configureColumns: "configureColumns", checkbox: "checkbox", globalOptions: "globalOptions", displayType: "displayType", elementInteractionType: "elementInteractionType", sort: "sort", dragDrop: "dragDrop", gridConfig: "gridConfig", initConfig: "initConfig", primaryInstance: "primaryInstance", singleClickHint: "singleClickHint", disableInfiniteScroll: "disableInfiniteScroll" }, outputs: { columnsChange: "columnsChange", displayTypeChange: "displayTypeChange", fetchData: "fetchData", clickItem: "clickItem", dblClickItem: "dblClickItem", sortChange: "sortChange", virtualNodesAdded: "virtualNodesAdded", displayTypeChanged: "displayTypeChanged" }, providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService], queries: [{ propertyName: "titleRef", first: true, predicate: ["title"], descendants: true }, { propertyName: "emptyRef", first: true, predicate: ["empty"], descendants: true }, { propertyName: "actionAreaRef", first: true, predicate: ["actionArea"], descendants: true }, { propertyName: "overlayRef", first: true, predicate: ["overlay"], descendants: true }], viewQueries: [{ propertyName: "nodeEntriesComponentRef", first: true, predicate: ["nodeEntriesComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<es-node-entries
|
|
248
|
+
#nodeEntriesComponent
|
|
249
|
+
*ngIf="!customNodeListComponent"
|
|
250
|
+
></es-node-entries>`, isInline: true, dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.NodeEntriesComponent, selector: "es-node-entries" }] }); }
|
|
251
|
+
}
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesWrapperComponent, decorators: [{
|
|
253
|
+
type: Component,
|
|
254
|
+
args: [{
|
|
255
|
+
selector: 'es-node-entries-wrapper',
|
|
256
|
+
template: `<es-node-entries
|
|
257
|
+
#nodeEntriesComponent
|
|
258
|
+
*ngIf="!customNodeListComponent"
|
|
259
|
+
></es-node-entries>`,
|
|
260
|
+
providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService],
|
|
261
|
+
}]
|
|
262
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.TemporaryStorageService }, { type: i0.NgZone }, { type: i2.NodeEntriesService }, { type: i3.OptionsHelperDataService }, { type: i4.NodeHelperService }, { type: i5.UIService }, { type: i6.NodeEntriesTemplatesService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { titleRef: [{
|
|
263
|
+
type: ContentChild,
|
|
264
|
+
args: ['title']
|
|
265
|
+
}], emptyRef: [{
|
|
266
|
+
type: ContentChild,
|
|
267
|
+
args: ['empty']
|
|
268
|
+
}], actionAreaRef: [{
|
|
269
|
+
type: ContentChild,
|
|
270
|
+
args: ['actionArea']
|
|
271
|
+
}], overlayRef: [{
|
|
272
|
+
type: ContentChild,
|
|
273
|
+
args: ['overlay']
|
|
274
|
+
}], nodeEntriesComponentRef: [{
|
|
275
|
+
type: ViewChild,
|
|
276
|
+
args: ['nodeEntriesComponent']
|
|
277
|
+
}], dataSource: [{
|
|
278
|
+
type: Input
|
|
279
|
+
}], scope: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], columns: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], configureColumns: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], checkbox: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], columnsChange: [{
|
|
288
|
+
type: Output
|
|
289
|
+
}], globalOptions: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], displayType: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], displayTypeChange: [{
|
|
294
|
+
type: Output
|
|
295
|
+
}], elementInteractionType: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], sort: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], dragDrop: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], gridConfig: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], initConfig: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], primaryInstance: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], singleClickHint: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], disableInfiniteScroll: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], fetchData: [{
|
|
312
|
+
type: Output
|
|
313
|
+
}], clickItem: [{
|
|
314
|
+
type: Output
|
|
315
|
+
}], dblClickItem: [{
|
|
316
|
+
type: Output
|
|
317
|
+
}], sortChange: [{
|
|
318
|
+
type: Output
|
|
319
|
+
}], virtualNodesAdded: [{
|
|
320
|
+
type: Output
|
|
321
|
+
}], displayTypeChanged: [{
|
|
322
|
+
type: Output
|
|
323
|
+
}] } });
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUVaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUlOLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9FLE9BQU8sRUFHSCxlQUFlLEVBUWYsc0JBQXNCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUl0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7OztBQVduRixNQUFNLE9BQU8sMkJBQTJCO0lBOEVwQyxZQUNZLGdCQUFrQyxFQUNsQyx1QkFBZ0QsRUFDaEQsTUFBYyxFQUNkLGNBQXFDLEVBQ3RDLGFBQXVDLEVBQ3RDLGlCQUFvQyxFQUNwQyxTQUFvQjtJQUM1QixRQUFRO0lBQ1IsbUNBQW1DO0lBQzNCLGdCQUE2QyxFQUM3QyxpQkFBb0MsRUFDcEMsVUFBc0I7UUFYdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENB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ZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4vbm9kZS1lbnRyaWVzLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWVudHJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRmV0Y2hFdmVudCxcbiAgICBHcmlkQ29uZmlnLFxuICAgIEludGVyYWN0aW9uVHlwZSxcbiAgICBMaXN0RHJhZ0dyb3BDb25maWcsXG4gICAgTGlzdEV2ZW50SW50ZXJmYWNlLFxuICAgIExpc3RPcHRpb25zLFxuICAgIExpc3RPcHRpb25zQ29uZmlnLFxuICAgIExpc3RTb3J0Q29uZmlnLFxuICAgIE5vZGVDbGlja0V2ZW50LFxuICAgIE5vZGVFbnRyaWVzRGF0YVR5cGUsXG4gICAgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSxcbn0gZnJvbSAnLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVEYXRhU291cmNlIH0gZnJvbSAnLi9ub2RlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL3V0aWwvaGVscGVyJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbkl0ZW0sIFNjb3BlIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVmZXJlbmNlLCBOb2RlLCBVc2VyIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBWaXJ0dWFsTm9kZSB9IGZyb20gJy4uL3R5cGVzL2FwaS1tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvb3B0aW9ucy1oZWxwZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYDxlcy1ub2RlLWVudHJpZXNcbiAgICAgICAgI25vZGVFbnRyaWVzQ29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwiIWN1c3RvbU5vZGVMaXN0Q29tcG9uZW50XCJcbiAgICA+PC9lcy1ub2RlLWVudHJpZXM+YCxcbiAgICBwcm92aWRlcnM6IFtOb2RlRW50cmllc1NlcnZpY2UsIE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSwgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNXcmFwcGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgTGlzdEV2ZW50SW50ZXJmYWNlPFQ+XG57XG4gICAgLyoqXG4gICAgICogdGl0bGUgKGFib3ZlKSB0aGUgdGFibGUvZ3JpZFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3RpdGxlJykgdGl0bGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqXG4gICAgICogZGF0YSBzaG93biB3aGVuIGRhdGEgc291cmNlIGlzIGVtcHR5XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYWN0aW9ucyBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAocGVyIGNhcmQgYXQgdGhlIGJvdHRvbSlcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25BcmVhJykgYWN0aW9uQXJlYVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYW4gb3ZlcmxheSBcImFib3ZlXCIgZWFjaCBjYXJkIChpLmUuIHRvIHNob3cgZGlzYWJsZWQgaW5mb3MpLCBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAmIG9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnbm9kZUVudHJpZXNDb21wb25lbnQnKSBub2RlRW50cmllc0NvbXBvbmVudFJlZjogTm9kZUVudHJpZXNDb21wb25lbnQ8VD47XG4gICAgQElucHV0KCkgZGF0YVNvdXJjZTogTm9kZURhdGFTb3VyY2U8VD47XG4gICAgQElucHV0KCkgc2NvcGU6IFNjb3BlO1xuICAgIEBJbnB1dCgpIGNvbHVtbnM6IExpc3RJdGVtW107XG4gICAgQElucHV0KCkgY29uZmlndXJlQ29sdW1uczogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGVja2JveCA9IHRydWU7XG4gICAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtW10+KCk7XG4gICAgQElucHV0KCkgZ2xvYmFsT3B0aW9uczogT3B0aW9uSXRlbVtdO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkO1xuICAgIEBPdXRwdXQoKSBkaXNwbGF5VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJpZXNEaXNwbGF5VHlwZT4oKTtcbiAgICBASW5wdXQoKSBlbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rO1xuICAgIEBJbnB1dCgpIHNvcnQ6IExpc3RTb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGRyYWdEcm9wOiBMaXN0RHJhZ0dyb3BDb25maWc8VD47XG4gICAgQElucHV0KCkgZ3JpZENvbmZpZzogR3JpZENvbmZpZztcbiAgICAvKipcbiAgICAgKiB0aGlzIGNhbiBiZSBzZXQgaW5zdGVhZCBvZiBjYWxsaW5nIGluaXRPcHRpb25zR2VuZXJhdG9yKClcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbml0Q29uZmlnOiBMaXN0T3B0aW9uc0NvbmZpZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgbm9kZS1lbnRyaWVzIGluc3RhbmNlIHJlcHJlc2VudHMgdGhlIHBhZ2UncyBtYWluIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBPbmx5IHNldCB0byB0cnVlIGZvciBvbmUgaW5zdGFuY2UgcGVyIHBhZ2UuXG4gICAgICpcbiAgICAgKiBJZiB0cnVlLCB0aGlzIGluc3RhbmNlIHdpbGxcbiAgICAgKiAtIGhhbmRsZSBwYWdlLXdpZGUga2V5Ym9hcmQgc2hvcnRjdXRzXG4gICAgICogLSB0YWtlIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBhbmQgYHBhZ2VTaXplYCBxdWVyeSBwYXJhbWV0ZXJzIGZvciBwYWdpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHJpbWFyeUluc3RhbmNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFVJIGhpbnRzIGZvciB3aGV0aGVyIGEgc2luZ2xlIGNsaWNrIHdpbGwgY2F1c2UgYSBkeW5hbWljIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgZG9lcyBub3QgY29uZmlndXJlIHRoZSBhY3R1YWwgYmVoYXZpb3IgYnV0IG9ubHkgVUkgaGludHMgdG8gdGhlIHVzZXIuIEhpbnRzIGluY2x1ZGVcbiAgICAgKiBob3ZlciBlZmZlY3RzIGFuZCBhIGNoYW5nZWQgY3Vyc29yLlxuICAgICAqXG4gICAgICogLSBXaGVuIGNob29zaW5nICdzdGF0aWMnLCB0aGUgYGNsaWNrSXRlbWAgZXZlbnQgc2hvdWxkIHRyaWdnZXIgc29tZSBzdGF0aW9uYXJ5IGFjdGlvbiBsaWtlXG4gICAgICogICBzZWxlY3RpbmcgdGhlIGVsZW1lbnQgb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBpbiBhIGNvbXBsZW1lbnRhcnkgcGFnZSBhcmVhLiBUaGVcbiAgICAgKiAgIGBkYmxDbGlja0l0ZW1gIGV2ZW50IGNhbiBiZSB1c2VkIGZvciBhIG1vcmUgZGlzcnVwdGl2ZSBhY3Rpb24uXG4gICAgICogLSBXaGVuIGNob29zaW5nICdkeW5hbWljJywgdGhlIGBjbGlja0l0ZW1gIGV2ZW50IHNob3VsZCB0cmlnZ2VyIGEgbWFqb3IgYWN0aW9uIGxpa2VcbiAgICAgKiAgIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSBvciBjbG9zaW5nIGEgZGlhbG9nLlxuICAgICAqL1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNvbnRyb2xsaW5nIHRoZSB1aSBoaW50cyBhbmQgdGhlIGFjdHVhbCBiZWhhdmlvciB3aXRoIGEgc2luZ2xlIG9wdGlvbi5cbiAgICBASW5wdXQoKSBzaW5nbGVDbGlja0hpbnQ6ICdkeW5hbWljJyB8ICdzdGF0aWMnID0gJ2R5bmFtaWMnO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBsb2FkIG1vcmUgZGF0YSBvbiBzY3JvbGwuXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZmV0Y2hEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxGZXRjaEV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBkYmxDbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0U29ydENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgdmlydHVhbE5vZGVzQWRkZWQ7XG4gICAgQE91dHB1dCgpIGRpc3BsYXlUeXBlQ2hhbmdlZDtcblxuICAgIGN1c3RvbU5vZGVMaXN0Q29tcG9uZW50OiBUeXBlPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIG9wdGlvbnM6IExpc3RPcHRpb25zO1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgdGVtcG9yYXJ5U3RvcmFnZVNlcnZpY2U6IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBvcHRpb25zSGVscGVyOiBPcHRpb25zSGVscGVyRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZUhlbHBlclNlcnZpY2U6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlLFxuICAgICAgICAvLyBAVE9ET1xuICAgICAgICAvLyBwcml2YXRlIG1haW5OYXY6IE1haW5OYXZTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgLy8gcmVndWxhcnkgcmUtYmluZCB0ZW1wbGF0ZSBzaW5jZSBpdCBtaWdodCBoYXZlIHVwZGF0ZWQgd2l0aG91dCBuZ0NoYW5nZXMgdHJpZ2dlclxuICAgICAgICAvKlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVtcHR5UmVmID0gdGhpcy5lbXB0eVJlZilcbiAgICAgICAgKTtcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNBZGRlZCA9IHRoaXMub3B0aW9uc0hlbHBlci52aXJ0dWFsTm9kZXNBZGRlZDtcbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZUNoYW5nZWQgPSB0aGlzLm9wdGlvbnNIZWxwZXIuZGlzcGxheVR5cGVDaGFuZ2VkO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5nZXREYXRhKCkuc2VsZWN0ZWRPYmplY3RzID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKS5hY3RpdmVPYmplY3RzID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignb3B0aW9uc0hlbHBlciBpcyBub3QgaW5pdGFsaXplZCBjb3JyZWN0bHk7IGRhdGEgaXMgZW1wdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJpbWFyeUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIucmVnaXN0ZXJHbG9iYWxLZXlib2FyZFNob3J0Y3V0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UubGlzdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb25maWd1cmVDb2x1bW5zID0gdGhpcy5jb25maWd1cmVDb2x1bW5zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmNoZWNrYm94ID0gdGhpcy5jaGVja2JveDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb2x1bW5zQ2hhbmdlID0gdGhpcy5jb2x1bW5zQ2hhbmdlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID0gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gdGhpcy5lbGVtZW50SW50ZXJhY3Rpb25UeXBlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmdyaWRDb25maWcgPSB0aGlzLmdyaWRDb25maWc7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zID0gdGhpcy5nbG9iYWxPcHRpb25zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydENoYW5nZSA9IHRoaXMuc29ydENoYW5nZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcCA9IHRoaXMuZHJhZ0Ryb3A7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY2xpY2tJdGVtID0gdGhpcy5jbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGJsQ2xpY2tJdGVtID0gdGhpcy5kYmxDbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZmV0Y2hEYXRhID0gdGhpcy5mZXRjaERhdGE7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UucHJpbWFyeUluc3RhbmNlID0gdGhpcy5wcmltYXJ5SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID0gdGhpcy5zaW5nbGVDbGlja0hpbnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gdGhpcy5kaXNhYmxlSW5maW5pdGVTY3JvbGw7XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2luaXRDb25maWcnXSkge1xuICAgICAgICAgICAgdGhpcy5pbml0T3B0aW9uc0dlbmVyYXRvcih0aGlzLmluaXRDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWY/LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIG1pZ2h0IG5lZWQgd3JhcHBpbmcgd2l0aCBgc2V0VGltZW91dGAuXG4gICAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyB0aGlzIHdyYXBwZXIgd2l0aCB0aGUgY29uZmlndXJlZCBjdXN0b20tbm9kZS1saXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPSB0aGlzLnRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLmdldChcbiAgICAgICAgICAgIFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLkNVU1RPTV9OT0RFX0VOVFJJRVNfQ09NUE9ORU5ULFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy51aVNlcnZpY2UuaW5qZWN0QW5ndWxhckNvbXBvbmVudChcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIC8vIElucHV0IGJpbmRpbmdzIGFyZSBpbml0aWFsaXplZCBpbiBgbmdPbkNoYW5nZXNgLlxuICAgICAgICAgICAgdGhpcy5nZXRPdXRwdXRCaW5kaW5ncygpLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2ltcGxlIG1hcCBvZiB0aGUgb3V0cHV0IGJpbmRpbmdzIGRlZmluZWQgaW4gdGhpcyBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPdXRwdXRCaW5kaW5ncygpOiB7IFtrZXk6IHN0cmluZ106IEV2ZW50RW1pdHRlcjxhbnk+IH0ge1xuICAgICAgICBjb25zdCBvdXRwdXRCaW5kaW5nczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcyBhcyBhbnkpW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRCaW5kaW5nc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dEJpbmRpbmdzO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlUeXBlKCk6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBzZXREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlQ2hhbmdlLmVtaXQoZGlzcGxheVR5cGUpO1xuICAgIH1cblxuICAgIHVwZGF0ZU5vZGVzKG5vZGVzOiB2b2lkIHwgVFtdKSB7XG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZ2V0RGF0YSgpLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgIGxldCBoaXRzID0gKG5vZGVzIGFzIFRbXSkuZmlsdGVyKChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIE5vZGUpLnJlZi5pZCk7XG4gICAgICAgICAgICBpZiAoaGl0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaWYgdGhlIG9yaWdpbmFsIGhhcyBjaGFuZ2VkIChmb3IgY29sbGVjdGlvbiByZWZzKVxuICAgICAgICAgICAgICAgIGhpdHMgPSAobm9kZXMgYXMgVFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIHVua25vd24gYXMgQ29sbGVjdGlvblJlZmVyZW5jZSkub3JpZ2luYWxJZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhpdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlSGVscGVyU2VydmljZS5jb3B5RGF0YVRvTm9kZShkIGFzIE5vZGUsIGhpdHNbMF0gYXMgTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0cmlnZ2VyIHJlYnVpbGRcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlKSB7XG4gICAgICAgICAgICAodGhpcy5kYXRhU291cmNlIGFzIE5vZGVEYXRhU291cmNlPFQ+KS5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChcbiAgICAgICAgICAgIC4uLm9sZFNlbGVjdGlvbi5tYXAoXG4gICAgICAgICAgICAgICAgKG8pID0+IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCkuZmlsdGVyKChkKSA9PiBIZWxwZXIub2JqZWN0RXF1YWxzKG8sIGQpKT8uWzBdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2hvd1Jlb3JkZXJDb2x1bW5zRGlhbG9nKCk6IHZvaWQge31cblxuICAgIGFkZFZpcnR1YWxOb2Rlcyh2aXJ0dWFsOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdmlydHVhbCA9IHZpcnR1YWwubWFwKChvKSA9PiB7XG4gICAgICAgICAgICAobyBhcyBWaXJ0dWFsTm9kZSkudmlydHVhbCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfSk7XG4gICAgICAgIHZpcnR1YWwuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgLnNvbWUoKGQpID0+XG4gICAgICAgICAgICAgICAgICAgIChkIGFzIE5vZGUpLnJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoZCBhcyBOb2RlKS5yZWY/LmlkID09PSAodiBhcyBOb2RlKS5yZWY/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChkIGFzIFVzZXIpLmF1dGhvcml0eU5hbWUgPT09ICh2IGFzIFVzZXIpLmF1dGhvcml0eU5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZXMoW3ZdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmFwcGVuZERhdGEoW3ZdLCAnYmVmb3JlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QoLi4udmlydHVhbCk7XG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzQWRkZWQuZW1pdCh2aXJ0dWFsIGFzIE5vZGVbXSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMob3B0aW9uczogTGlzdE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRPcHRpb25zR2VuZXJhdG9yKGNvbmZpZzogTGlzdE9wdGlvbnNDb25maWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zSGVscGVyLmluaXRDb21wb25lbnRzKGNvbmZpZy5hY3Rpb25iYXIsIHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIuc2V0RGF0YSh7XG4gICAgICAgICAgICBzY29wZTogdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSxcbiAgICAgICAgICAgIGFjdGl2ZU9iamVjdHM6IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzOiB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgICAgIGFsbE9iamVjdHM6IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICBwYXJlbnQ6IGNvbmZpZy5wYXJlbnQsXG4gICAgICAgICAgICBjdXN0b21PcHRpb25zOiBjb25maWcuY3VzdG9tT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBjaGFuZ2VkLWFmdGVyLWNoZWNrZWQgZXJyb3JcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRlbXBsYXRlcygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLnRpdGxlID0gdGhpcy50aXRsZVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5ID0gdGhpcy5lbXB0eVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmFjdGlvbkFyZWEgPSB0aGlzLmFjdGlvbkFyZWFSZWY7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5vdmVybGF5ID0gdGhpcy5vdmVybGF5UmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc2V0IHRoZSBwYWdpbmF0aW9uIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICogaGludDogdGhpcyB3aWxsIGRvIG5vdGhpbmcgaW4gY2FzZSB0aGUgcGFnaW5hdGlvblN0cmF0ZWd5ICE9PSBQYWdpbmF0aW9uXG4gICAgICovXG4gICAgcmVzZXRQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGVFbnRyaWVzQ29tcG9uZW50UmVmPy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGVzKG9iamVjdHM6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVtb3ZlRGF0YShvYmplY3RzKTtcbiAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb24oKS5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Component, Optional, ViewChild, } from '@angular/core';
|
|
2
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { first, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { NodeEntriesDisplayType } from './entries-model';
|
|
6
|
+
import { NodeDataSourceRemote } from './node-data-source-remote';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./node-entries-global.service";
|
|
9
|
+
import * as i2 from "../services/node-entries.service";
|
|
10
|
+
import * as i3 from "./node-entries-templates.service";
|
|
11
|
+
import * as i4 from "../services/abstract/keyboard-shortcuts.service";
|
|
12
|
+
import * as i5 from "@angular/router";
|
|
13
|
+
import * as i6 from "@ngx-translate/core";
|
|
14
|
+
import * as i7 from "@angular/common";
|
|
15
|
+
import * as i8 from "@angular/material/paginator";
|
|
16
|
+
import * as i9 from "./node-entries-card-grid/node-entries-card-grid.component";
|
|
17
|
+
import * as i10 from "./node-entries-table/node-entries-table.component";
|
|
18
|
+
export class NodeEntriesComponent {
|
|
19
|
+
constructor(changeDetectorRef, entriesGlobalService, entriesService, templatesService, globalKeyboardShortcuts, route, translate) {
|
|
20
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
21
|
+
this.entriesGlobalService = entriesGlobalService;
|
|
22
|
+
this.entriesService = entriesService;
|
|
23
|
+
this.templatesService = templatesService;
|
|
24
|
+
this.globalKeyboardShortcuts = globalKeyboardShortcuts;
|
|
25
|
+
this.route = route;
|
|
26
|
+
this.translate = translate;
|
|
27
|
+
this.NodeEntriesDisplayType = NodeEntriesDisplayType;
|
|
28
|
+
this.destroyed = new Subject();
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
if (this.entriesService.primaryInstance) {
|
|
32
|
+
this.registerGlobalKeyboardShortcuts();
|
|
33
|
+
}
|
|
34
|
+
if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {
|
|
35
|
+
// We don't require `sort` to be defined, but if it is set but not yet ready (`null`),
|
|
36
|
+
// we wait for its value before initializing the data source, so the first request is
|
|
37
|
+
// sent with the correct sort configuration. That is why we explicitly do not drop
|
|
38
|
+
// `undefined` with the `first` operator below.
|
|
39
|
+
this.entriesService.sortSubject
|
|
40
|
+
.pipe(first((sort) => sort !== null))
|
|
41
|
+
.subscribe(() => this.initRemoteDataSource(this.entriesService.dataSource));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
ngAfterViewInit() {
|
|
45
|
+
if (this.paginator) {
|
|
46
|
+
this.initPaginator(this.paginator);
|
|
47
|
+
this.changeDetectorRef.detectChanges();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
ngOnDestroy() {
|
|
51
|
+
this.destroyed.next();
|
|
52
|
+
this.destroyed.complete();
|
|
53
|
+
}
|
|
54
|
+
registerGlobalKeyboardShortcuts() {
|
|
55
|
+
this.globalKeyboardShortcuts.register([
|
|
56
|
+
{
|
|
57
|
+
modifiers: ['Ctrl/Cmd'],
|
|
58
|
+
keyCode: 'KeyA',
|
|
59
|
+
ignoreWhen: (event) =>
|
|
60
|
+
// SmallGrid doesn't support selection
|
|
61
|
+
this.entriesService.displayType === NodeEntriesDisplayType.SmallGrid,
|
|
62
|
+
callback: () => this.entriesService.toggleSelectAll(),
|
|
63
|
+
},
|
|
64
|
+
], { until: this.destroyed });
|
|
65
|
+
}
|
|
66
|
+
initRemoteDataSource(dataSource) {
|
|
67
|
+
const pageSize = this.entriesGlobalService.getPaginatorSizeOptions(this.entriesService.scope)[0];
|
|
68
|
+
dataSource.init({
|
|
69
|
+
paginationConfig: {
|
|
70
|
+
defaultPageSize: pageSize,
|
|
71
|
+
strategy: this.entriesService.paginationStrategy,
|
|
72
|
+
},
|
|
73
|
+
defaultSort: this.entriesService.sort,
|
|
74
|
+
});
|
|
75
|
+
if (this.entriesService.primaryInstance) {
|
|
76
|
+
// Automatic query-params handling is only supported by node-data-source-remote.
|
|
77
|
+
dataSource.registerQueryParameters(this.route);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async initPaginator(paginator) {
|
|
81
|
+
paginator._intl.itemsPerPageLabel = await this.translate
|
|
82
|
+
.get('PAGINATOR.itemsPerPageLabel')
|
|
83
|
+
.toPromise();
|
|
84
|
+
paginator._intl.nextPageLabel = await this.translate
|
|
85
|
+
.get('PAGINATOR.nextPageLabel')
|
|
86
|
+
.toPromise();
|
|
87
|
+
paginator._intl.previousPageLabel = await this.translate
|
|
88
|
+
.get('PAGINATOR.previousPageLabel')
|
|
89
|
+
.toPromise();
|
|
90
|
+
paginator._intl.getRangeLabel = (page, pageSize, length) => this.translate.instant('PAGINATOR.getRangeLabel', {
|
|
91
|
+
page: page + 1,
|
|
92
|
+
pageSize,
|
|
93
|
+
length,
|
|
94
|
+
pageCount: Math.ceil(length / pageSize),
|
|
95
|
+
});
|
|
96
|
+
// Connect data source.
|
|
97
|
+
this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe((dataSource) => {
|
|
98
|
+
if (dataSource instanceof NodeDataSourceRemote) {
|
|
99
|
+
dataSource.paginator = paginator;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
paginator.length = dataSource?.getTotal();
|
|
103
|
+
dataSource
|
|
104
|
+
?.connectPagination()
|
|
105
|
+
.pipe(takeUntil(this.destroyed))
|
|
106
|
+
.subscribe(() => {
|
|
107
|
+
paginator.length = dataSource.getTotal();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
openPage(page) {
|
|
113
|
+
this.entriesService.fetchData.emit({
|
|
114
|
+
offset: page.pageIndex * page.pageSize,
|
|
115
|
+
amount: page.pageSize,
|
|
116
|
+
reset: true,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NodeEntriesGlobalService }, { token: i2.NodeEntriesService }, { token: i3.NodeEntriesTemplatesService }, { token: i4.KeyboardShortcutsService, optional: true }, { token: i5.ActivatedRoute }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesComponent, selector: "es-node-entries", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 0;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: ["displayType"] }, { kind: "component", type: i10.NodeEntriesTableComponent, selector: "es-node-entries-table" }] }); }
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, decorators: [{
|
|
123
|
+
type: Component,
|
|
124
|
+
args: [{ selector: 'es-node-entries', template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 0;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"] }]
|
|
125
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NodeEntriesGlobalService }, { type: i2.NodeEntriesService }, { type: i3.NodeEntriesTemplatesService }, { type: i4.KeyboardShortcutsService, decorators: [{
|
|
126
|
+
type: Optional
|
|
127
|
+
}] }, { type: i5.ActivatedRoute }, { type: i6.TranslateService }]; }, propDecorators: { paginator: [{
|
|
128
|
+
type: ViewChild,
|
|
129
|
+
args: [MatPaginator]
|
|
130
|
+
}] } });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZW50cmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFHVCxRQUFRLEVBQ1IsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUd0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUF1QixzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTTlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPakUsTUFBTSxPQUFPLG9CQUFvQjtJQVM3QixZQUNXLGlCQUFvQyxFQUNwQyxvQkFBOEMsRUFDOUMsY0FBcUMsRUFDckMsZ0JBQTZDLEVBQ2hDLHVCQUFpRCxFQUM3RCxLQUFxQixFQUNyQixTQUEyQjtRQU41QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBMEI7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNkI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUEwQjtRQUM3RCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFr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QUFDLFFBQVE7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3JCLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0ExSFEsb0JBQW9CO2tHQUFwQixvQkFBb0Isa0dBS2xCLFlBQVksZ0RDaEMzQixrM0NBaUNBOzsyRkROYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksaUJBQWlCOzswQkFrQnRCLFFBQVE7d0dBVFksU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNEYXRhVHlwZSwgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB9IGZyb20gJy4vZW50cmllcy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWVudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlLCBHZW5lcmljQXV0aG9yaXR5IH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBLZXlib2FyZFNob3J0Y3V0c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC9rZXlib2FyZC1zaG9ydGN1dHMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRGF0YVNvdXJjZVJlbW90ZSB9IGZyb20gJy4vbm9kZS1kYXRhLXNvdXJjZS1yZW1vdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcycsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDb21wb25lbnQ8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAgIHJlYWRvbmx5IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgPSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuXG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBnbG9iYWxLZXlib2FyZFNob3J0Y3V0czogS2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNTZXJ2aWNlLnByaW1hcnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckdsb2JhbEtleWJvYXJkU2hvcnRjdXRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlUmVtb3RlKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCByZXF1aXJlIGBzb3J0YCB0byBiZSBkZWZpbmVkLCBidXQgaWYgaXQgaXMgc2V0IGJ1dCBub3QgeWV0IHJlYWR5IChgbnVsbGApLFxuICAgICAgICAgICAgLy8gd2Ugd2FpdCBmb3IgaXRzIHZhbHVlIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlIGRhdGEgc291cmNlLCBzbyB0aGUgZmlyc3QgcmVxdWVzdCBpc1xuICAgICAgICAgICAgLy8gc2VudCB3aXRoIHRoZSBjb3JyZWN0IHNvcnQgY29uZmlndXJhdGlvbi4gVGhhdCBpcyB3aHkgd2UgZXhwbGljaXRseSBkbyBub3QgZHJvcFxuICAgICAgICAgICAgLy8gYHVuZGVmaW5lZGAgd2l0aCB0aGUgYGZpcnN0YCBvcGVyYXRvciBiZWxvdy5cbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydFN1YmplY3RcbiAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgoc29ydCkgPT4gc29ydCAhPT0gbnVsbCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRSZW1vdGVEYXRhU291cmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlIGFzIE5vZGVEYXRhU291cmNlUmVtb3RlPFQ+LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgdGhpcy5pbml0UGFnaW5hdG9yKHRoaXMucGFnaW5hdG9yKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyR2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMucmVnaXN0ZXIoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6IFsnQ3RybC9DbWQnXSxcbiAgICAgICAgICAgICAgICAgICAga2V5Q29kZTogJ0tleUEnLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVXaGVuOiAoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbWFsbEdyaWQgZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kaXNwbGF5VHlwZSA9PT0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5TbWFsbEdyaWQsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLmVudHJpZXNTZXJ2aWNlLnRvZ2dsZVNlbGVjdEFsbCgpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeyB1bnRpbDogdGhpcy5kZXN0cm95ZWQgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZW1vdGVEYXRhU291cmNlKGRhdGFTb3VyY2U6IE5vZGVEYXRhU291cmNlUmVtb3RlPFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5lbnRyaWVzR2xvYmFsU2VydmljZS5nZXRQYWdpbmF0b3JTaXplT3B0aW9ucyhcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2NvcGUsXG4gICAgICAgIClbMF07XG4gICAgICAgIGRhdGFTb3VyY2UuaW5pdCh7XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhZ2VTaXplOiBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBzdHJhdGVneTogdGhpcy5lbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFNvcnQ6IHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNTZXJ2aWNlLnByaW1hcnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gQXV0b21hdGljIHF1ZXJ5LXBhcmFtcyBoYW5kbGluZyBpcyBvbmx5IHN1cHBvcnRlZCBieSBub2RlLWRhdGEtc291cmNlLXJlbW90ZS5cbiAgICAgICAgICAgIGRhdGFTb3VyY2UucmVnaXN0ZXJRdWVyeVBhcmFtZXRlcnModGhpcy5yb3V0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcbiAgICAgICAgcGFnaW5hdG9yLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5pdGVtc1BlclBhZ2VMYWJlbCcpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICAgIHBhZ2luYXRvci5faW50bC5uZXh0UGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5uZXh0UGFnZUxhYmVsJylcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgcGFnaW5hdG9yLl9pbnRsLnByZXZpb3VzUGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5wcmV2aW91c1BhZ2VMYWJlbCcpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICAgIHBhZ2luYXRvci5faW50bC5nZXRSYW5nZUxhYmVsID0gKHBhZ2UsIHBhZ2VTaXplLCBsZW5ndGgpID0+XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdQQUdJTkFUT1IuZ2V0UmFuZ2VMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlICsgMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBNYXRoLmNlaWwobGVuZ3RoIC8gcGFnZVNpemUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vIENvbm5lY3QgZGF0YSBzb3VyY2UuXG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGRhdGFTb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhU291cmNlIGluc3RhbmNlb2YgTm9kZURhdGFTb3VyY2VSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICAoZGF0YVNvdXJjZSBhcyBOb2RlRGF0YVNvdXJjZVJlbW90ZSkucGFnaW5hdG9yID0gcGFnaW5hdG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0b3IubGVuZ3RoID0gZGF0YVNvdXJjZT8uZ2V0VG90YWwoKTtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAgID8uY29ubmVjdFBhZ2luYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvci5sZW5ndGggPSBkYXRhU291cmNlLmdldFRvdGFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuUGFnZShwYWdlOiBQYWdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5mZXRjaERhdGEuZW1pdCh7XG4gICAgICAgICAgICBvZmZzZXQ6IHBhZ2UucGFnZUluZGV4ICogcGFnZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIGFtb3VudDogcGFnZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHJlc2V0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidG9wLW1hdHRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzU2VydmljZS50aXRsZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlclwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48bmctY29udGFpbmVyICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuVGFibGVcIj5cbiAgICA8ZXMtbm9kZS1lbnRyaWVzLXRhYmxlPjwvZXMtbm9kZS1lbnRyaWVzLXRhYmxlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5kaXNwbGF5VHlwZSA9PT0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5TbWFsbEdyaWQgfHxcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLkdyaWRcbiAgICBcIlxuICA+XG4gICAgPGVzLW5vZGUtZW50cmllcy1jYXJkLWdyaWQgW2Rpc3BsYXlUeXBlXT1cImVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlXCI+XG4gICAgPC9lcy1ub2RlLWVudHJpZXMtY2FyZC1ncmlkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNFbXB0eSgpICYmICFlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bWF0LXBhZ2luYXRvclxuICAjcGFnaW5hdG9yXG4gIFtwYWdlU2l6ZU9wdGlvbnNdPVwiZW50cmllc0dsb2JhbFNlcnZpY2UuZ2V0UGFnaW5hdG9yU2l6ZU9wdGlvbnMoZW50cmllc1NlcnZpY2Uuc2NvcGUpXCJcbiAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3kgPT09ICdwYWdpbmF0b3InXCJcbiAgW2NsYXNzLmRpc3BsYXktbm9uZV09XCJcbiAgICAoZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgJiYgZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgIT09ICdwYWdlJykgfHxcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzRW1wdHkoKVxuICBcIlxuICAocGFnZSk9XCJvcGVuUGFnZSgkZXZlbnQpXCJcbj48L21hdC1wYWdpbmF0b3I+XG4iXX0=
|