@netgrif/components-core 6.3.0 → 6.4.0-beta.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/esm2020/assets/i18n/de.json +1 -0
- package/esm2020/assets/i18n/en.json +1 -0
- package/esm2020/assets/i18n/sk.json +1 -0
- package/esm2020/lib/data-fields/base-component/abstract-base-data-field.component.mjs +51 -0
- package/esm2020/lib/data-fields/boolean-field/abstract-boolean-field.component.mjs +7 -26
- package/esm2020/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.mjs +46 -0
- package/esm2020/lib/data-fields/boolean-field/models/boolean-field.mjs +9 -1
- package/esm2020/lib/data-fields/button-field/abstract-button-field.component.mjs +7 -39
- package/esm2020/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.mjs +58 -0
- package/esm2020/lib/data-fields/button-field/models/button-field.mjs +5 -1
- package/esm2020/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.mjs +67 -0
- package/esm2020/lib/data-fields/case-ref-field/model/case-ref-field.mjs +11 -0
- package/esm2020/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.mjs +4 -0
- package/esm2020/lib/data-fields/data-field-template/abstract-data-field-template.component.mjs +51 -6
- package/esm2020/lib/data-fields/date-field/abstract-date-field.component.mjs +10 -12
- package/esm2020/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.mjs +29 -0
- package/esm2020/lib/data-fields/date-field/models/date-field.mjs +5 -1
- package/esm2020/lib/data-fields/date-time-field/abstract-date-time-field.component.mjs +10 -12
- package/esm2020/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.mjs +29 -0
- package/esm2020/lib/data-fields/date-time-field/models/date-time-field.mjs +5 -1
- package/esm2020/lib/data-fields/enumeration-field/abstract-enumeration-field.component.mjs +4 -1
- package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.mjs +23 -20
- package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.mjs +20 -21
- package/esm2020/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.mjs +26 -19
- package/esm2020/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.mjs +16 -12
- package/esm2020/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.mjs +16 -12
- package/esm2020/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.mjs +26 -21
- package/esm2020/lib/data-fields/enumeration-field/models/enumeration-field.mjs +9 -1
- package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +11 -420
- package/esm2020/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.mjs +456 -0
- package/esm2020/lib/data-fields/file-field/models/file-field-constants.mjs +5 -0
- package/esm2020/lib/data-fields/file-field/models/file-field.mjs +6 -1
- package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +11 -278
- package/esm2020/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.mjs +304 -0
- package/esm2020/lib/data-fields/file-list-field/models/file-list-field.mjs +6 -1
- package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.mjs +4 -4
- package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.mjs +4 -4
- package/esm2020/lib/data-fields/filter-field/abstract-filter-field.component.mjs +8 -20
- package/esm2020/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.mjs +38 -0
- package/esm2020/lib/data-fields/filter-field/models/filter-field.mjs +5 -1
- package/esm2020/lib/data-fields/i18n-field/abstract-i18n-errors.component.mjs +18 -16
- package/esm2020/lib/data-fields/i18n-field/abstract-i18n-field.component.mjs +4 -1
- package/esm2020/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.mjs +24 -20
- package/esm2020/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.mjs +35 -32
- package/esm2020/lib/data-fields/i18n-field/models/i18n-field.mjs +6 -2
- package/esm2020/lib/data-fields/models/abstract-data-field-component.mjs +4 -1
- package/esm2020/lib/data-fields/models/abstract-data-field.mjs +14 -2
- package/esm2020/lib/data-fields/models/component.mjs +21 -2
- package/esm2020/lib/data-fields/models/data-field-portal-data-injection-token.mjs +3 -0
- package/esm2020/lib/data-fields/models/update-strategy.mjs +7 -0
- package/esm2020/lib/data-fields/multichoice-field/abstract-multichoice-field.component.mjs +4 -1
- package/esm2020/lib/data-fields/multichoice-field/models/multichoice-field.mjs +9 -1
- package/esm2020/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.mjs +30 -30
- package/esm2020/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.mjs +16 -12
- package/esm2020/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.mjs +16 -12
- package/esm2020/lib/data-fields/number-field/abstract-number-errors.component.mjs +17 -15
- package/esm2020/lib/data-fields/number-field/abstract-number-field.component.mjs +4 -1
- package/esm2020/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.mjs +21 -15
- package/esm2020/lib/data-fields/number-field/models/number-field.mjs +5 -1
- package/esm2020/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/public-api.mjs +17 -2
- package/esm2020/lib/data-fields/task-ref-field/abstract-task-ref-field.component.mjs +10 -116
- package/esm2020/lib/data-fields/task-ref-field/model/task-ref-field.mjs +5 -1
- package/esm2020/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.mjs +130 -0
- package/esm2020/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.mjs +54 -0
- package/esm2020/lib/data-fields/text-field/abstract-dashboard-text-field.component.mjs +14 -14
- package/esm2020/lib/data-fields/text-field/abstract-text-errors.component.mjs +23 -3
- package/esm2020/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.mjs +12 -6
- package/esm2020/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.mjs +16 -16
- package/esm2020/lib/data-fields/text-field/models/text-field.mjs +8 -4
- package/esm2020/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.mjs +14 -14
- package/esm2020/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.mjs +14 -14
- package/esm2020/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.mjs +14 -14
- package/esm2020/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.mjs +17 -17
- package/esm2020/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.mjs +12 -12
- package/esm2020/lib/data-fields/user-field/abstract-user-field.component.mjs +7 -39
- package/esm2020/lib/data-fields/user-field/models/user-field.mjs +5 -1
- package/esm2020/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.mjs +70 -0
- package/esm2020/lib/data-fields/user-list-field/abstract-user-list-field.component.mjs +7 -45
- package/esm2020/lib/data-fields/user-list-field/models/user-list-field.mjs +5 -1
- package/esm2020/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.mjs +60 -0
- package/esm2020/lib/dialog/injection-tokens.mjs +10 -0
- package/esm2020/lib/dialog/public-api.mjs +2 -1
- package/esm2020/lib/filter/models/task-search-request-body.mjs +1 -1
- package/esm2020/lib/filter/user-filters.service.mjs +22 -15
- package/esm2020/lib/impersonation/services/impersonation-user-select.service.mjs +24 -17
- package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +6 -2
- package/esm2020/lib/registry/component-registry.service.mjs +38 -0
- package/esm2020/lib/registry/public-api.mjs +2 -0
- package/esm2020/lib/side-menu/content-components/public-api.mjs +2 -1
- package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +24 -5
- package/esm2020/lib/task-content/model/field-type-resource.mjs +2 -1
- package/esm2020/lib/task-content/services/field-converter.service.mjs +4 -1
- package/esm2020/lib/task-content/task-content/abstract-task-content.component.mjs +20 -7
- package/esm2020/lib/view/case-view/service/case-view-service.mjs +20 -15
- package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +12 -7
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/netgrif-components-core.mjs +1771 -961
- package/fesm2015/netgrif-components-core.mjs.map +1 -1
- package/fesm2020/netgrif-components-core.mjs +1675 -957
- package/fesm2020/netgrif-components-core.mjs.map +1 -1
- package/lib/data-fields/base-component/abstract-base-data-field.component.d.ts +18 -0
- package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +5 -7
- package/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.d.ts +14 -0
- package/lib/data-fields/boolean-field/models/boolean-field.d.ts +3 -0
- package/lib/data-fields/button-field/abstract-button-field.component.d.ts +5 -16
- package/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.d.ts +23 -0
- package/lib/data-fields/button-field/models/button-field.d.ts +1 -0
- package/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.d.ts +16 -0
- package/lib/data-fields/case-ref-field/model/case-ref-field.d.ts +9 -0
- package/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.d.ts +3 -0
- package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +22 -3
- package/lib/data-fields/date-field/abstract-date-field.component.d.ts +7 -7
- package/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.d.ts +12 -0
- package/lib/data-fields/date-field/models/date-field.d.ts +1 -0
- package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +7 -7
- package/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.d.ts +12 -0
- package/lib/data-fields/date-time-field/models/date-time-field.d.ts +1 -0
- package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +3 -0
- package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +8 -10
- package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +6 -10
- package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +9 -9
- package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +6 -8
- package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +6 -8
- package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +8 -9
- package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +3 -0
- package/lib/data-fields/file-field/abstract-file-field.component.d.ts +9 -147
- package/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.d.ts +151 -0
- package/lib/data-fields/file-field/models/file-field-constants.d.ts +4 -0
- package/lib/data-fields/file-field/models/file-field.d.ts +1 -0
- package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +8 -71
- package/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.d.ts +76 -0
- package/lib/data-fields/file-list-field/models/file-list-field.d.ts +1 -0
- package/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.d.ts +3 -3
- package/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.d.ts +3 -3
- package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +6 -11
- package/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.d.ts +18 -0
- package/lib/data-fields/filter-field/models/filter-field.d.ts +1 -0
- package/lib/data-fields/i18n-field/abstract-i18n-errors.component.d.ts +6 -9
- package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +3 -0
- package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +6 -8
- package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +5 -8
- package/lib/data-fields/i18n-field/models/i18n-field.d.ts +1 -0
- package/lib/data-fields/models/abstract-data-field-component.d.ts +1 -0
- package/lib/data-fields/models/abstract-data-field.d.ts +9 -0
- package/lib/data-fields/models/component.d.ts +19 -0
- package/lib/data-fields/models/data-field-portal-data-injection-token.d.ts +13 -0
- package/lib/data-fields/models/update-strategy.d.ts +6 -0
- package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +3 -0
- package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +3 -0
- package/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.d.ts +6 -9
- package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +6 -7
- package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +6 -8
- package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +6 -9
- package/lib/data-fields/number-field/abstract-number-field.component.d.ts +3 -0
- package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +4 -2
- package/lib/data-fields/number-field/models/number-field.d.ts +1 -0
- package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +4 -2
- package/lib/data-fields/public-api.d.ts +16 -1
- package/lib/data-fields/task-ref-field/abstract-task-ref-field.component.d.ts +6 -13
- package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +1 -0
- package/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.d.ts +20 -0
- package/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.d.ts +16 -0
- package/lib/data-fields/text-field/abstract-dashboard-text-field.component.d.ts +5 -9
- package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +7 -2
- package/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.d.ts +4 -2
- package/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.d.ts +4 -2
- package/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.d.ts +4 -2
- package/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.d.ts +4 -2
- package/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.d.ts +4 -2
- package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +5 -9
- package/lib/data-fields/text-field/models/text-field.d.ts +3 -2
- package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +5 -9
- package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +5 -9
- package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +5 -9
- package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +6 -9
- package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +6 -5
- package/lib/data-fields/user-field/abstract-user-field.component.d.ts +5 -27
- package/lib/data-fields/user-field/models/user-field.d.ts +1 -0
- package/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.d.ts +34 -0
- package/lib/data-fields/user-list-field/abstract-user-list-field.component.d.ts +5 -25
- package/lib/data-fields/user-list-field/models/user-list-field.d.ts +1 -0
- package/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.d.ts +24 -0
- package/lib/dialog/injection-tokens.d.ts +10 -0
- package/lib/dialog/public-api.d.ts +1 -0
- package/lib/filter/models/task-search-request-body.d.ts +6 -0
- package/lib/filter/user-filters.service.d.ts +4 -2
- package/lib/impersonation/services/impersonation-user-select.service.d.ts +3 -3
- package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +3 -1
- package/lib/{data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.d.ts → registry/component-registry.service.d.ts} +6 -5
- package/lib/registry/public-api.d.ts +1 -0
- package/lib/side-menu/content-components/public-api.d.ts +1 -0
- package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +7 -3
- package/lib/task-content/model/field-type-resource.d.ts +1 -0
- package/lib/task-content/task-content/abstract-task-content.component.d.ts +5 -1
- package/lib/view/case-view/service/case-view-service.d.ts +3 -3
- package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +3 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/assets/i18n/de.json +1 -0
- package/src/assets/i18n/en.json +1 -0
- package/src/assets/i18n/sk.json +1 -0
- package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.mjs +0 -35
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { Component, Inject, Input, Optional, ViewChild } from "@angular/core";
|
|
2
|
+
import { FilePreviewType } from "../models/file-field";
|
|
3
|
+
import { BehaviorSubject } from "rxjs";
|
|
4
|
+
import { ProgressType } from "../../../resources/resource-provider.service";
|
|
5
|
+
import { HttpParams } from "@angular/common/http";
|
|
6
|
+
import { take } from "rxjs/operators";
|
|
7
|
+
import { DATA_FIELD_PORTAL_DATA } from "../../models/data-field-portal-data-injection-token";
|
|
8
|
+
import { AbstractBaseDataFieldComponent } from "../../base-component/abstract-base-data-field.component";
|
|
9
|
+
import { FILE_FIELD_HEIGHT, FILE_FIELD_PADDING, PREVIEW, PREVIEW_BUTTON } from '../models/file-field-constants';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../../resources/engine-endpoint/task-resource.service";
|
|
12
|
+
import * as i2 from "../../../logger/services/logger.service";
|
|
13
|
+
import * as i3 from "../../../snack-bar/services/snack-bar.service";
|
|
14
|
+
import * as i4 from "@ngx-translate/core";
|
|
15
|
+
import * as i5 from "../../../event/services/event.service";
|
|
16
|
+
import * as i6 from "@angular/platform-browser";
|
|
17
|
+
export class AbstractFileDefaultFieldComponent extends AbstractBaseDataFieldComponent {
|
|
18
|
+
/**
|
|
19
|
+
* Only inject services.
|
|
20
|
+
* @param _taskResourceService Provides to download a file from the backend
|
|
21
|
+
* @param _log Logger service
|
|
22
|
+
* @param _snackbar Snackbar service to notify user
|
|
23
|
+
* @param _translate Translate service for I18N
|
|
24
|
+
* @param _eventService used for parsing of backend response
|
|
25
|
+
* Option injected trough `NAE_INFORM_ABOUT_INVALID_DATA` InjectionToken
|
|
26
|
+
* @param _sanitizer Sanitize url of image preview
|
|
27
|
+
* @param dataFieldPortalData Field and form control data if field is provided with portal
|
|
28
|
+
*/
|
|
29
|
+
constructor(_taskResourceService, _log, _snackbar, _translate, _eventService, _sanitizer, dataFieldPortalData) {
|
|
30
|
+
super(dataFieldPortalData);
|
|
31
|
+
this._taskResourceService = _taskResourceService;
|
|
32
|
+
this._log = _log;
|
|
33
|
+
this._snackbar = _snackbar;
|
|
34
|
+
this._translate = _translate;
|
|
35
|
+
this._eventService = _eventService;
|
|
36
|
+
this._sanitizer = _sanitizer;
|
|
37
|
+
/**
|
|
38
|
+
* If file type can be displayed
|
|
39
|
+
*/
|
|
40
|
+
this.isDisplayable = false;
|
|
41
|
+
this.isFilePreview = false;
|
|
42
|
+
this.isFilePreviewButton = false;
|
|
43
|
+
this.state = this.defaultState;
|
|
44
|
+
this.fullSource = new BehaviorSubject(null);
|
|
45
|
+
this.taskId = dataFieldPortalData.additionalFieldProperties.taskId;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Set :
|
|
49
|
+
* - File field to [FileFieldService]{@link FileFieldService}
|
|
50
|
+
* - Display name
|
|
51
|
+
*/
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
this.isFilePreview = this.dataField?.component?.name === PREVIEW;
|
|
54
|
+
this.isFilePreviewButton = this.dataField?.component?.name === PREVIEW_BUTTON;
|
|
55
|
+
}
|
|
56
|
+
ngAfterViewInit() {
|
|
57
|
+
if (this.fileUploadEl) {
|
|
58
|
+
this.fileUploadEl.nativeElement.onchange = () => {
|
|
59
|
+
this.upload();
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (this.isFilePreview) {
|
|
63
|
+
if (!!this.imageDivEl) {
|
|
64
|
+
if (!this.isEmpty()) {
|
|
65
|
+
this.initializePreviewIfDisplayable();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (this.isFilePreviewButton) {
|
|
70
|
+
if (!this.isEmpty()) {
|
|
71
|
+
this.initializePreviewIfDisplayable();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.updatedFieldSubscription = this.dataField.updated.subscribe(() => {
|
|
75
|
+
this.previewSource = undefined;
|
|
76
|
+
if (!!this.isFilePreview && !!this.dataField?.value?.name) {
|
|
77
|
+
this.fileForDownload = undefined;
|
|
78
|
+
this.fileForPreview = undefined;
|
|
79
|
+
this.initializePreviewIfDisplayable();
|
|
80
|
+
}
|
|
81
|
+
if (!!this.isFilePreviewButton && !!this.dataField?.value?.name) {
|
|
82
|
+
this.fileForDownload = undefined;
|
|
83
|
+
this.fileForPreview = undefined;
|
|
84
|
+
this.initializePreviewIfDisplayable();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
super.ngOnDestroy();
|
|
90
|
+
this.fullSource.complete();
|
|
91
|
+
this.updatedFieldSubscription.unsubscribe();
|
|
92
|
+
}
|
|
93
|
+
chooseFile() {
|
|
94
|
+
if (this.state.uploading || this.formControlRef.disabled) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this.fileUploadEl.nativeElement.click();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Call after click on file field.
|
|
101
|
+
*
|
|
102
|
+
* If file field has no file uploaded
|
|
103
|
+
* [FilesUploadComponent]{@link AbstractFilesUploadComponent} via [SideMenu]{@link SideMenuService} opens.
|
|
104
|
+
*
|
|
105
|
+
* Otherwise opens a file picker from which the user can select files.
|
|
106
|
+
*/
|
|
107
|
+
upload() {
|
|
108
|
+
if (!this.fileUploadEl.nativeElement.files || this.fileUploadEl.nativeElement.files.length === 0) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (!this.taskId) {
|
|
112
|
+
this._log.error('File cannot be uploaded. No task is set to the field.');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (this.dataField.value &&
|
|
116
|
+
this.dataField.value.name &&
|
|
117
|
+
this.fileUploadEl.nativeElement.files.item(0).name === this.dataField.value.name) {
|
|
118
|
+
this._log.error('User chose the same file. Uploading skipped');
|
|
119
|
+
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.wontUploadSameFile'));
|
|
120
|
+
this.fileUploadEl.nativeElement.value = '';
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (this.dataField.maxUploadSizeInBytes &&
|
|
124
|
+
this.dataField.maxUploadSizeInBytes < this.fileUploadEl.nativeElement.files.item(0).size) {
|
|
125
|
+
this._log.error('File cannot be uploaded. Maximum size of file exceeded.');
|
|
126
|
+
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.maxFilesSizeExceeded') + this.dataField.maxUploadSizeInBytes);
|
|
127
|
+
this.fileUploadEl.nativeElement.value = '';
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.state = this.defaultState;
|
|
131
|
+
this.state.uploading = true;
|
|
132
|
+
const fileFormData = new FormData();
|
|
133
|
+
const fileToUpload = this.fileUploadEl.nativeElement.files.item(0);
|
|
134
|
+
const data = {};
|
|
135
|
+
data[this.resolveParentTaskId()] = this.dataField.stringId;
|
|
136
|
+
fileFormData.append('file', fileToUpload);
|
|
137
|
+
fileFormData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' }));
|
|
138
|
+
this._taskResourceService.uploadFile(this.taskId, this.dataField.stringId, fileFormData, false)
|
|
139
|
+
.subscribe((response) => {
|
|
140
|
+
if (response.type && response.type === ProgressType.UPLOAD) {
|
|
141
|
+
this.state.progress = response.progress;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.state.completed = true;
|
|
145
|
+
this.state.uploading = false;
|
|
146
|
+
this.state.progress = 0;
|
|
147
|
+
if (response.error) {
|
|
148
|
+
this.state.error = true;
|
|
149
|
+
this._log.error(`File [${this.dataField.stringId}] ${this.fileUploadEl.nativeElement.files.item(0)} uploading has failed!`, response.error);
|
|
150
|
+
if (response.error) {
|
|
151
|
+
this._snackbar.openErrorSnackBar(this._translate.instant(response.error));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.fileUploadFailed'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const changedFieldsMap = this._eventService.parseChangedFieldsFromOutcomeTree(response.outcome);
|
|
159
|
+
this.dataField.emitChangedFields(changedFieldsMap);
|
|
160
|
+
this._log.debug(`File [${this.dataField.stringId}] ${this.fileUploadEl.nativeElement.files.item(0).name} was successfully uploaded`);
|
|
161
|
+
this.state.error = false;
|
|
162
|
+
this.dataField.downloaded = false;
|
|
163
|
+
this.dataField.value.name = fileToUpload.name;
|
|
164
|
+
if (this.isFilePreview) {
|
|
165
|
+
this.initializePreviewIfDisplayable();
|
|
166
|
+
}
|
|
167
|
+
this.fullSource.next(undefined);
|
|
168
|
+
this.fileForDownload = undefined;
|
|
169
|
+
this.formControlRef.setValue(this.dataField.value.name);
|
|
170
|
+
}
|
|
171
|
+
this.dataField.touch = true;
|
|
172
|
+
this.dataField.update();
|
|
173
|
+
this.fileUploadEl.nativeElement.value = '';
|
|
174
|
+
}
|
|
175
|
+
}, error => {
|
|
176
|
+
this.state.completed = true;
|
|
177
|
+
this.state.error = true;
|
|
178
|
+
this.state.uploading = false;
|
|
179
|
+
this.state.progress = 0;
|
|
180
|
+
this._log.error(`File [${this.dataField.stringId}] ${this.fileUploadEl.nativeElement.files.item(0)} uploading has failed!`, error);
|
|
181
|
+
if (error?.error?.message) {
|
|
182
|
+
this._snackbar.openErrorSnackBar(this._translate.instant(error.error.message));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.fileUploadFailed'));
|
|
186
|
+
}
|
|
187
|
+
this.dataField.touch = true;
|
|
188
|
+
this.dataField.update();
|
|
189
|
+
this.fileUploadEl.nativeElement.value = '';
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
download() {
|
|
193
|
+
if (!this.checkFileBeforeDownload()) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (!!this.fileForDownload) {
|
|
197
|
+
this.downloadViaAnchor(this.fileForDownload);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this.state = this.defaultState;
|
|
201
|
+
this.state.downloading = true;
|
|
202
|
+
this._taskResourceService.downloadFile(this.resolveParentTaskId(), this.dataField.stringId).subscribe(response => {
|
|
203
|
+
if (!response.type || response.type !== ProgressType.DOWNLOAD) {
|
|
204
|
+
this._log.debug(`File [${this.dataField.stringId}] ${this.dataField.value.name} was successfully downloaded`);
|
|
205
|
+
this.downloadViaAnchor(response);
|
|
206
|
+
if (this.isFilePreview) {
|
|
207
|
+
this.initDownloadFile(response);
|
|
208
|
+
}
|
|
209
|
+
this.state.downloading = false;
|
|
210
|
+
this.state.progress = 0;
|
|
211
|
+
this.dataField.downloaded = true;
|
|
212
|
+
}
|
|
213
|
+
}, error => {
|
|
214
|
+
this._log.error(`Downloading file [${this.dataField.stringId}] ${this.dataField.value.name} has failed!`, error);
|
|
215
|
+
this._snackbar.openErrorSnackBar(this.dataField.value.name + ' ' + this._translate.instant('dataField.snackBar.downloadFail'));
|
|
216
|
+
this.state.downloading = false;
|
|
217
|
+
this.state.progress = 0;
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
initDownloadFile(response) {
|
|
221
|
+
if (response instanceof Blob) {
|
|
222
|
+
if (this.previewExtension === FilePreviewType.pdf) {
|
|
223
|
+
this.fileForDownload = new Blob([response], { type: 'application/pdf' });
|
|
224
|
+
this.fullSource.next(this._sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(this.fileForDownload)));
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
this.fileForDownload = new Blob([response], { type: 'application/octet-stream' });
|
|
228
|
+
this.fullSource.next(this._sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(this.fileForDownload)));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
downloadViaAnchor(blob) {
|
|
233
|
+
const a = document.createElement('a');
|
|
234
|
+
document.body.appendChild(a);
|
|
235
|
+
a.setAttribute('style', 'display: none');
|
|
236
|
+
if (!this.fileForDownload) {
|
|
237
|
+
blob = new Blob([blob], { type: 'application/octet-stream' });
|
|
238
|
+
}
|
|
239
|
+
const url = window.URL.createObjectURL(!!this.fileForDownload ? this.fileForDownload : blob);
|
|
240
|
+
a.href = url;
|
|
241
|
+
a.download = this.dataField.value.name;
|
|
242
|
+
a.click();
|
|
243
|
+
window.URL.revokeObjectURL(url);
|
|
244
|
+
document.body.removeChild(a);
|
|
245
|
+
}
|
|
246
|
+
deleteFile() {
|
|
247
|
+
if (!this.dataField.value || !this.dataField.value.name) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (!this.taskId) {
|
|
251
|
+
this._log.error('File cannot be deleted. No task is set to the field.');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
let param = new HttpParams();
|
|
255
|
+
param = param.set("parentTaskId", this.resolveParentTaskId());
|
|
256
|
+
this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, undefined, param).pipe(take(1)).subscribe(response => {
|
|
257
|
+
if (response.success) {
|
|
258
|
+
const filename = this.dataField.value.name;
|
|
259
|
+
this.dataField.value = {};
|
|
260
|
+
this.formControlRef.setValue('');
|
|
261
|
+
this.dataField.update();
|
|
262
|
+
this.dataField.downloaded = false;
|
|
263
|
+
this.fullSource.next(undefined);
|
|
264
|
+
this.fileForDownload = undefined;
|
|
265
|
+
this.previewSource = undefined;
|
|
266
|
+
this.fileForPreview = undefined;
|
|
267
|
+
this._log.debug(`File [${this.dataField.stringId}] ${filename} was successfully deleted`);
|
|
268
|
+
this.formControlRef.markAsTouched();
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
this._log.error(`Deleting file [${this.dataField.stringId}] ${this.dataField.value.name} has failed!`, response.error);
|
|
272
|
+
this._snackbar.openErrorSnackBar(this.dataField.value.name + ' ' + this._translate.instant('dataField.snackBar.fileDeleteFailed'));
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
isEmpty() {
|
|
277
|
+
return !this.dataField.value || !this.dataField.value.name;
|
|
278
|
+
}
|
|
279
|
+
get defaultState() {
|
|
280
|
+
return {
|
|
281
|
+
progress: 0,
|
|
282
|
+
completed: false,
|
|
283
|
+
error: false,
|
|
284
|
+
uploading: false,
|
|
285
|
+
downloading: false
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Construct display name.
|
|
290
|
+
*/
|
|
291
|
+
constructDisplayName() {
|
|
292
|
+
if (!!this.dataField) {
|
|
293
|
+
if (!!this.dataField.value && !!this.dataField.value.name) {
|
|
294
|
+
return this.dataField.value.name;
|
|
295
|
+
}
|
|
296
|
+
else if (!!this.dataField.placeholder) {
|
|
297
|
+
return this.dataField.placeholder;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return this._translate.instant('dataField.file.noFile');
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Initialize file field image from backend if it is image type.
|
|
304
|
+
*/
|
|
305
|
+
initFileFieldImage() {
|
|
306
|
+
if (!this.checkFileBeforeDownload()) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
this.state.downloading = true;
|
|
310
|
+
this._taskResourceService.downloadFilePreview(this.resolveParentTaskId(), this.dataField.stringId).subscribe(response => {
|
|
311
|
+
if (response instanceof Blob) {
|
|
312
|
+
this._log.debug(`Preview of file [${this.dataField.stringId}] ${this.dataField.value.name} was successfully downloaded`);
|
|
313
|
+
this.fileForPreview = new Blob([response], { type: 'application/octet-stream' });
|
|
314
|
+
this.previewSource = this._sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(this.fileForPreview));
|
|
315
|
+
}
|
|
316
|
+
if (response == null || response instanceof Blob) {
|
|
317
|
+
this.state.downloading = false;
|
|
318
|
+
}
|
|
319
|
+
}, error => {
|
|
320
|
+
this._log.error(`Downloading file [${this.dataField.stringId}] ${this.dataField.value.name} has failed!`, error);
|
|
321
|
+
this._snackbar.openErrorSnackBar(this.dataField.value.name + ' ' + this._translate.instant('dataField.snackBar.downloadFail'));
|
|
322
|
+
this.state.downloading = false;
|
|
323
|
+
this.state.progress = 0;
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
checkFileBeforeDownload() {
|
|
327
|
+
if (this.isEmpty()) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
if (!this.taskId) {
|
|
331
|
+
this._log.error('File cannot be downloaded. No task is set to the field.');
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
return true;
|
|
335
|
+
}
|
|
336
|
+
showPreviewDialog() {
|
|
337
|
+
if (!this.checkFileBeforeDownload()) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
this._taskResourceService.downloadFile(this.resolveParentTaskId(), this.dataField.stringId).subscribe(response => {
|
|
341
|
+
if (!response.type || response.type !== ProgressType.DOWNLOAD) {
|
|
342
|
+
this._log.debug(`File [${this.dataField.stringId}] ${this.dataField.value.name} was successfully downloaded`);
|
|
343
|
+
this.initDownloadFile(response);
|
|
344
|
+
}
|
|
345
|
+
}, error => {
|
|
346
|
+
this._log.error(`Downloading file [${this.dataField.stringId}] ${this.dataField.value.name} has failed!`, error);
|
|
347
|
+
this._snackbar.openErrorSnackBar(this.dataField.value.name + ' ' + this._translate.instant('dataField.snackBar.downloadFail'));
|
|
348
|
+
this.state.progress = 0;
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
changeMaxWidth(event) {
|
|
352
|
+
if (!!this.imageEl) {
|
|
353
|
+
this.imageEl.nativeElement.style.maxWidth = event.newRect.width + 'px';
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
initializePreviewIfDisplayable() {
|
|
357
|
+
const extension = this.dataField.value.name.split('.').reverse()[0];
|
|
358
|
+
this.isDisplayable = Object.values(FilePreviewType).includes(extension);
|
|
359
|
+
if (this.isDisplayable) {
|
|
360
|
+
this.previewExtension = FilePreviewType[extension];
|
|
361
|
+
this.initFileFieldImage();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
getHeight() {
|
|
365
|
+
return this.dataField.layout && this.dataField.layout.rows && this.dataField.layout.rows !== 1 ?
|
|
366
|
+
(this.dataField.layout.rows) * FILE_FIELD_HEIGHT - FILE_FIELD_PADDING : FILE_FIELD_HEIGHT - FILE_FIELD_PADDING;
|
|
367
|
+
}
|
|
368
|
+
getPreviewBorderWidth() {
|
|
369
|
+
if (this.borderPropertyEnabled('borderWidth')) {
|
|
370
|
+
return this.dataField.component.properties.borderWidth + 'px';
|
|
371
|
+
}
|
|
372
|
+
return `${AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_WIDTH}px`;
|
|
373
|
+
}
|
|
374
|
+
getPreviewBorderStyle() {
|
|
375
|
+
if (this.borderPropertyEnabled('borderStyle')) {
|
|
376
|
+
return this.dataField.component.properties.borderStyle;
|
|
377
|
+
}
|
|
378
|
+
return AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_STYLE;
|
|
379
|
+
}
|
|
380
|
+
getPreviewBorderColor() {
|
|
381
|
+
if (this.borderPropertyEnabled('borderColor')) {
|
|
382
|
+
return this.dataField.component.properties.borderColor;
|
|
383
|
+
}
|
|
384
|
+
return AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_COLOR;
|
|
385
|
+
}
|
|
386
|
+
isBorderLGBTQ() {
|
|
387
|
+
if (this.borderPropertyEnabled('borderLGBTQ')) {
|
|
388
|
+
return this.dataField.component.properties.borderLGBTQ === 'true';
|
|
389
|
+
}
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
isBorderDefault() {
|
|
393
|
+
if (this.borderPropertyEnabled('borderEnabled')) {
|
|
394
|
+
return this.dataField.component.properties.borderEnabled === 'true';
|
|
395
|
+
}
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
borderPropertyEnabled(property) {
|
|
399
|
+
return !!this.dataField.component && !!this.dataField.component.properties && property in this.dataField.component.properties;
|
|
400
|
+
}
|
|
401
|
+
resolveParentTaskId() {
|
|
402
|
+
return !!this.dataField.parentTaskId ? this.dataField.parentTaskId : this.taskId;
|
|
403
|
+
}
|
|
404
|
+
hasTitle() {
|
|
405
|
+
return this.dataField.title !== undefined && this.dataField.title !== '';
|
|
406
|
+
}
|
|
407
|
+
hasHint() {
|
|
408
|
+
return this.dataField.description !== undefined && this.dataField.description !== '';
|
|
409
|
+
}
|
|
410
|
+
getCutProperty(i18nLabel) {
|
|
411
|
+
if (this.labelWidth !== i18nLabel.offsetWidth) {
|
|
412
|
+
this.labelWidth = i18nLabel.offsetWidth;
|
|
413
|
+
const calculatedWidth = 'calc(0.5em + ' + i18nLabel.offsetWidth / 4 * 3 + 'px)';
|
|
414
|
+
this.cutProperty = `polygon(0 0, 0 100%, 100% 100%, 100% 0%, ${calculatedWidth} 0, ${calculatedWidth} 6%, 0.5em 6%, 0.5em 0)`;
|
|
415
|
+
}
|
|
416
|
+
return this.cutProperty;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* The width of the default file preview border in pixels. The `px` string is appended in the code.
|
|
421
|
+
*/
|
|
422
|
+
AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_WIDTH = 0;
|
|
423
|
+
/**
|
|
424
|
+
* The CSS style attribute of the default file preview border.
|
|
425
|
+
*/
|
|
426
|
+
AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_STYLE = 'none';
|
|
427
|
+
/**
|
|
428
|
+
* The CSS color string of the default file preview border.
|
|
429
|
+
*/
|
|
430
|
+
AbstractFileDefaultFieldComponent.DEFAULT_PREVIEW_BORDER_COLOR = 'black';
|
|
431
|
+
AbstractFileDefaultFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractFileDefaultFieldComponent, deps: [{ token: i1.TaskResourceService }, { token: i2.LoggerService }, { token: i3.SnackBarService }, { token: i4.TranslateService }, { token: i5.EventService }, { token: i6.DomSanitizer }, { token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
432
|
+
AbstractFileDefaultFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractFileDefaultFieldComponent, selector: "ncc-abstract-file-default-fied", inputs: { taskId: "taskId" }, viewQueries: [{ propertyName: "fileUploadEl", first: true, predicate: ["fileUploadInput"], descendants: true }, { propertyName: "imageEl", first: true, predicate: ["imageEl"], descendants: true }, { propertyName: "imageDivEl", first: true, predicate: ["imageDiv"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractFileDefaultFieldComponent, decorators: [{
|
|
434
|
+
type: Component,
|
|
435
|
+
args: [{
|
|
436
|
+
selector: 'ncc-abstract-file-default-fied',
|
|
437
|
+
template: ''
|
|
438
|
+
}]
|
|
439
|
+
}], ctorParameters: function () { return [{ type: i1.TaskResourceService }, { type: i2.LoggerService }, { type: i3.SnackBarService }, { type: i4.TranslateService }, { type: i5.EventService }, { type: i6.DomSanitizer }, { type: undefined, decorators: [{
|
|
440
|
+
type: Optional
|
|
441
|
+
}, {
|
|
442
|
+
type: Inject,
|
|
443
|
+
args: [DATA_FIELD_PORTAL_DATA]
|
|
444
|
+
}] }]; }, propDecorators: { taskId: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], fileUploadEl: [{
|
|
447
|
+
type: ViewChild,
|
|
448
|
+
args: ['fileUploadInput']
|
|
449
|
+
}], imageEl: [{
|
|
450
|
+
type: ViewChild,
|
|
451
|
+
args: ['imageEl']
|
|
452
|
+
}], imageDivEl: [{
|
|
453
|
+
type: ViewChild,
|
|
454
|
+
args: ['imageDiv']
|
|
455
|
+
}] } });
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS1kZWZhdWx0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvZmlsZS1maWVsZC9maWxlLWRlZmF1bHQtZmllbGQvYWJzdHJhY3QtZmlsZS1kZWZhdWx0LWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQVksZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEUsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQVFuRCxPQUFPLEVBQUMsWUFBWSxFQUFtQixNQUFNLDhDQUE4QyxDQUFDO0FBRTVGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEMsT0FBTyxFQUFDLHNCQUFzQixFQUFzQixNQUFNLHFEQUFxRCxDQUFDO0FBQ2hILE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7O0FBYzlHLE1BQU0sT0FBZ0IsaUNBQWtDLFNBQVEsOEJBQXlDO0lBb0VyRzs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBZ0Msb0JBQXlDLEVBQ3pDLElBQW1CLEVBQ25CLFNBQTBCLEVBQzFCLFVBQTRCLEVBQzVCLGFBQTJCLEVBQzNCLFVBQXdCLEVBQ1UsbUJBQW1EO1FBQ2pILEtBQUssQ0FBQyxtQkFBbUIs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QVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEYsSUFBSSxDQUFDLFdBQVcsR0FBRyw0Q0FBNEMsZUFBZSxPQUFPLGVBQWUseUJBQXlCLENBQUM7U0FDakk7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzs7QUFyZkQ7O0dBRUc7QUFDb0IsOERBQTRCLEdBQUcsQ0FBRSxDQUFBO0FBQ3hEOztHQUVHO0FBQ29CLDhEQUE0QixHQUFHLE1BQU8sQ0FBQTtBQUM3RDs7R0FFRztBQUNvQiw4REFBNEIsR0FBRyxPQUFRLENBQUE7K0hBWjVDLGlDQUFpQyx5TUFxRlQsc0JBQXNCO21IQXJGOUMsaUNBQWlDLDBaQUZ6QyxFQUFFOzRGQUVNLGlDQUFpQztrQkFKdEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBc0YwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQjs0Q0FuRWhELE1BQU07c0JBQXJCLEtBQUs7Z0JBSytCLFlBQVk7c0JBQWhELFNBQVM7dUJBQUMsaUJBQWlCO2dCQUlDLE9BQU87c0JBQW5DLFNBQVM7dUJBQUMsU0FBUztnQkFFVSxVQUFVO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge0ZpbGVGaWVsZCwgRmlsZVByZXZpZXdUeXBlfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbGUtZmllbGRcIjtcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVXJsfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7VGFza1Jlc291cmNlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlXCI7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0V2ZW50U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2V2ZW50L3NlcnZpY2VzL2V2ZW50LnNlcnZpY2VcIjtcbmltcG9ydCB7RmlsZUZpZWxkSWRCb2R5fSBmcm9tIFwiLi4vLi4vbW9kZWxzL2ZpbGUtZmllbGQtaWQtYm9keVwiO1xuaW1wb3J0IHtFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2VcIjtcbmltcG9ydCB7UHJvZ3Jlc3NUeXBlLCBQcm92aWRlclByb2dyZXNzfSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSBcIi4uLy4uLy4uL2V2ZW50L3NlcnZpY2VzL2ludGVyZmFjZXMvY2hhbmdlZC1maWVsZHMtbWFwXCI7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHt0YWtlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7UmVzaXplZEV2ZW50fSBmcm9tIFwiYW5ndWxhci1yZXNpemUtZXZlbnRcIjtcbmltcG9ydCB7REFUQV9GSUVMRF9QT1JUQUxfREFUQSwgRGF0YUZpZWxkUG9ydGFsRGF0YX0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhLWZpZWxkLXBvcnRhbC1kYXRhLWluamVjdGlvbi10b2tlblwiO1xuaW1wb3J0IHtBYnN0cmFjdEJhc2VEYXRhRmllbGRDb21wb25lbnR9IGZyb20gXCIuLi8uLi9iYXNlLWNvbXBvbmVudC9hYnN0cmFjdC1iYXNlLWRhdGEtZmllbGQuY29tcG9uZW50XCI7XG5pbXBvcnQge0ZJTEVfRklFTERfSEVJR0hULCBGSUxFX0ZJRUxEX1BBRERJTkcsIFBSRVZJRVcsIFBSRVZJRVdfQlVUVE9OfSBmcm9tICcuLi9tb2RlbHMvZmlsZS1maWVsZC1jb25zdGFudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTdGF0ZSB7XG4gICAgcHJvZ3Jlc3M6IG51bWJlcjtcbiAgICB1cGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZG93bmxvYWRpbmc6IGJvb2xlYW47XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGVycm9yOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1maWxlLWRlZmF1bHQtZmllZCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZURlZmF1bHRGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0QmFzZURhdGFGaWVsZENvbXBvbmVudDxGaWxlRmllbGQ+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgZGVmYXVsdCBmaWxlIHByZXZpZXcgYm9yZGVyIGluIHBpeGVscy4gVGhlIGBweGAgc3RyaW5nIGlzIGFwcGVuZGVkIGluIHRoZSBjb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9XSURUSCA9IDA7XG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzdHlsZSBhdHRyaWJ1dGUgb2YgdGhlIGRlZmF1bHQgZmlsZSBwcmV2aWV3IGJvcmRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUFJFVklFV19CT1JERVJfU1RZTEUgPSAnbm9uZSc7XG4gICAgLyoqXG4gICAgICogVGhlIENTUyBjb2xvciBzdHJpbmcgb2YgdGhlIGRlZmF1bHQgZmlsZSBwcmV2aWV3IGJvcmRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUFJFVklFV19CT1JERVJfQ09MT1IgPSAnYmxhY2snO1xuXG4gICAgcHVibGljIHN0YXRlOiBGaWxlU3RhdGU7XG4gICAgLyoqXG4gICAgICogVGFzayBtb25nbyBzdHJpbmcgaWQgaXMgYmluZGluZyBwcm9wZXJ0eSBmcm9tIHBhcmVudCBjb21wb25lbnQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRmlsZSBwaWNrZXIgZWxlbWVudCByZWZlcmVuY2UgZnJvbSBjb21wb25lbnQgdGVtcGxhdGUgdGhhdCBpcyBpbml0aWFsaXplZCBhZnRlciB2aWV3IGluaXQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZElucHV0JykgcHVibGljIGZpbGVVcGxvYWRFbDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICAvKipcbiAgICAgKiBJbWFnZSBmaWVsZCB2aWV3IGVsZW1lbnQgcmVmZXJlbmNlIGZyb20gY29tcG9uZW50IHRlbXBsYXRlIHRoYXQgaXMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdmlldyBpbml0LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlRWwnKSBwdWJsaWMgaW1hZ2VFbDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlRGl2JykgcHVibGljIGltYWdlRGl2RWw6IEVsZW1lbnRSZWY7XG4gICAgLyoqXG4gICAgICogSWYgZmlsZSB0eXBlIGNhbiBiZSBkaXNwbGF5ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEaXNwbGF5YWJsZSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIE1heCBoZWlnaHQgb2YgcHJldmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgbWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3RvcmUgZmlsZSBmb3IgcHJldmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgZmlsZUZvclByZXZpZXc6IEJsb2I7XG4gICAgLyoqXG4gICAgICogVXJsIG9mIHByZXZpZXcgZmlsZVxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aWV3U291cmNlOiBTYWZlVXJsO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGZpbGUgdG8gc2hvdy9kb3dubG9hZFxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsZUZvckRvd25sb2FkOiBCbG9iO1xuICAgIC8qKlxuICAgICAqIEZ1bGwgc2l6ZSBmaWxlIHVybFxuICAgICAqL1xuICAgIHB1YmxpYyBmdWxsU291cmNlOiBCZWhhdmlvclN1YmplY3Q8U2FmZVVybD47XG4gICAgLyoqXG4gICAgICogRXh0ZW5zaW9uIG9mIGZpbGUgdG8gcHJldmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aWV3RXh0ZW5zaW9uOiBGaWxlUHJldmlld1R5cGU7XG4gICAgLyoqXG4gICAgICogRm9ybSBjb250cm9sIHN1YnNjcmlwdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlZEZpZWxkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgaXNGaWxlUHJldmlldyA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0ZpbGVQcmV2aWV3QnV0dG9uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsYWJlbFdpZHRoOiBudW1iZXI7XG4gICAgcHVibGljIGN1dFByb3BlcnR5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IGluamVjdCBzZXJ2aWNlcy5cbiAgICAgKiBAcGFyYW0gX3Rhc2tSZXNvdXJjZVNlcnZpY2UgUHJvdmlkZXMgdG8gZG93bmxvYWQgYSBmaWxlIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgKiBAcGFyYW0gX2xvZyBMb2dnZXIgc2VydmljZVxuICAgICAqIEBwYXJhbSBfc25hY2tiYXIgU25hY2tiYXIgc2VydmljZSB0byBub3RpZnkgdXNlclxuICAgICAqIEBwYXJhbSBfdHJhbnNsYXRlIFRyYW5zbGF0ZSBzZXJ2aWNlIGZvciBJMThOXG4gICAgICogQHBhcmFtIF9ldmVudFNlcnZpY2UgdXNlZCBmb3IgcGFyc2luZyBvZiBiYWNrZW5kIHJlc3BvbnNlXG4gICAgICogT3B0aW9uIGluamVjdGVkIHRyb3VnaCBgTkFFX0lORk9STV9BQk9VVF9JTlZBTElEX0RBVEFgIEluamVjdGlvblRva2VuXG4gICAgICogQHBhcmFtIF9zYW5pdGl6ZXIgU2FuaXRpemUgdXJsIG9mIGltYWdlIHByZXZpZXdcbiAgICAgKiBAcGFyYW0gZGF0YUZpZWxkUG9ydGFsRGF0YSBGaWVsZCBhbmQgZm9ybSBjb250cm9sIGRhdGEgaWYgZmllbGQgaXMgcHJvdmlkZWQgd2l0aCBwb3J0YWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX0ZJRUxEX1BPUlRBTF9EQVRBKSBkYXRhRmllbGRQb3J0YWxEYXRhOiBEYXRhRmllbGRQb3J0YWxEYXRhPEZpbGVGaWVsZD4pIHtcbiAgICAgICAgc3VwZXIoZGF0YUZpZWxkUG9ydGFsRGF0YSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmRlZmF1bHRTdGF0ZTtcbiAgICAgICAgdGhpcy5mdWxsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlVXJsPihudWxsKTtcbiAgICAgICAgdGhpcy50YXNrSWQgPSBkYXRhRmllbGRQb3J0YWxEYXRhLmFkZGl0aW9uYWxGaWVsZFByb3BlcnRpZXMudGFza0lkIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgOlxuICAgICAqICAtIEZpbGUgZmllbGQgdG8gW0ZpbGVGaWVsZFNlcnZpY2Vde0BsaW5rIEZpbGVGaWVsZFNlcnZpY2V9XG4gICAgICogIC0gRGlzcGxheSBuYW1lXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaXNGaWxlUHJldmlldyA9IHRoaXMuZGF0YUZpZWxkPy5jb21wb25lbnQ/Lm5hbWUgPT09IFBSRVZJRVc7XG4gICAgICAgIHRoaXMuaXNGaWxlUHJldmlld0J1dHRvbiA9IHRoaXMuZGF0YUZpZWxkPy5jb21wb25lbnQ/Lm5hbWUgPT09IFBSRVZJRVdfQlVUVE9OO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZVVwbG9hZEVsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50Lm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRmlsZVByZXZpZXcpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuaW1hZ2VEaXZFbCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUHJldmlld0lmRGlzcGxheWFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNGaWxlUHJldmlld0J1dHRvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByZXZpZXdJZkRpc3BsYXlhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVkRmllbGRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFGaWVsZC51cGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmlzRmlsZVByZXZpZXcgJiYgISF0aGlzLmRhdGFGaWVsZD8udmFsdWU/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JQcmV2aWV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByZXZpZXdJZkRpc3BsYXlhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISF0aGlzLmlzRmlsZVByZXZpZXdCdXR0b24gJiYgISF0aGlzLmRhdGFGaWVsZD8udmFsdWU/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JQcmV2aWV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByZXZpZXdJZkRpc3BsYXlhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZnVsbFNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZWRGaWVsZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaG9vc2VGaWxlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS51cGxvYWRpbmcgfHwgdGhpcy5mb3JtQ29udHJvbFJlZi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsIGFmdGVyIGNsaWNrIG9uIGZpbGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBJZiBmaWxlIGZpZWxkIGhhcyBubyBmaWxlIHVwbG9hZGVkXG4gICAgICogW0ZpbGVzVXBsb2FkQ29tcG9uZW50XXtAbGluayBBYnN0cmFjdEZpbGVzVXBsb2FkQ29tcG9uZW50fSB2aWEgW1NpZGVNZW51XXtAbGluayBTaWRlTWVudVNlcnZpY2V9IG9wZW5zLlxuICAgICAqXG4gICAgICogT3RoZXJ3aXNlIG9wZW5zIGEgZmlsZSBwaWNrZXIgZnJvbSB3aGljaCB0aGUgdXNlciBjYW4gc2VsZWN0IGZpbGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcyB8fCB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmlsZSBjYW5ub3QgYmUgdXBsb2FkZWQuIE5vIHRhc2sgaXMgc2V0IHRvIHRoZSBmaWVsZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKS5uYW1lID09PSB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1VzZXIgY2hvc2UgdGhlIHNhbWUgZmlsZS4gVXBsb2FkaW5nIHNraXBwZWQnKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIud29udFVwbG9hZFNhbWVGaWxlJykpO1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFGaWVsZC5tYXhVcGxvYWRTaXplSW5CeXRlcyAmJlxuICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQubWF4VXBsb2FkU2l6ZUluQnl0ZXMgPCB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzLml0ZW0oMCkuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSB1cGxvYWRlZC4gTWF4aW11bSBzaXplIG9mIGZpbGUgZXhjZWVkZWQuJyk7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0JhcihcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLm1heEZpbGVzU2l6ZUV4Y2VlZGVkJykgKyB0aGlzLmRhdGFGaWVsZC5tYXhVcGxvYWRTaXplSW5CeXRlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5kZWZhdWx0U3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGUudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGZpbGVUb1VwbG9hZCA9IHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKSBhcyBGaWxlO1xuICAgICAgICBjb25zdCBkYXRhOiBGaWxlRmllbGRJZEJvZHkgPSB7fTtcbiAgICAgICAgZGF0YVt0aGlzLnJlc29sdmVQYXJlbnRUYXNrSWQoKV0gPSB0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZDtcbiAgICAgICAgZmlsZUZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XG4gICAgICAgIGZpbGVGb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSldLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nfSkpO1xuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnVwbG9hZEZpbGUodGhpcy50YXNrSWQsIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkLCBmaWxlRm9ybURhdGEsIGZhbHNlKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSAmJiAocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSA9PT0gUHJvZ3Jlc3NUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApfSB1cGxvYWRpbmcgaGFzIGZhaWxlZCFgLCByZXNwb25zZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHJlc3BvbnNlLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZmlsZVVwbG9hZEZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHNNYXA6IENoYW5nZWRGaWVsZHNNYXAgPSB0aGlzLl9ldmVudFNlcnZpY2UucGFyc2VDaGFuZ2VkRmllbGRzRnJvbU91dGNvbWVUcmVlKHJlc3BvbnNlLm91dGNvbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQuZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlZEZpZWxkc01hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKS5uYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkYFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmRvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgPSBmaWxlVG9VcGxvYWQubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRmlsZVByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVQcmV2aWV3SWZEaXNwbGF5YWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mdWxsU291cmNlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbFJlZi5zZXRWYWx1ZSh0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC50b3VjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKX0gdXBsb2FkaW5nIGhhcyBmYWlsZWQhYCwgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoZXJyb3IuZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZmlsZVVwbG9hZEZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudG91Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb3dubG9hZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrRmlsZUJlZm9yZURvd25sb2FkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLmZpbGVGb3JEb3dubG9hZCkge1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFZpYUFuY2hvcih0aGlzLmZpbGVGb3JEb3dubG9hZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuZGVmYXVsdFN0YXRlO1xuICAgICAgICB0aGlzLnN0YXRlLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5kb3dubG9hZEZpbGUodGhpcy5yZXNvbHZlUGFyZW50VGFza0lkKCksXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmICghKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgfHwgKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgIT09IFByb2dyZXNzVHlwZS5ET1dOTE9BRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5kYXRhRmllbGQudmFsdWUubmFtZX0gd2FzIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZFZpYUFuY2hvcihyZXNwb25zZSBhcyBCbG9iKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZpbGVQcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdERvd25sb2FkRmlsZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5kb3dubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEb3dubG9hZGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgKyAnICcgKyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmRvd25sb2FkRmFpbCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERvd25sb2FkRmlsZShyZXNwb25zZTogQmxvYiB8IFByb3ZpZGVyUHJvZ3Jlc3MpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0V4dGVuc2lvbiA9PT0gRmlsZVByZXZpZXdUeXBlLnBkZikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9wZGYnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU291cmNlLm5leHQodGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUZvckRvd25sb2FkKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IG5ldyBCbG9iKFtyZXNwb25zZV0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFNvdXJjZS5uZXh0KHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlRm9yRG93bmxvYWQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZG93bmxvYWRWaWFBbmNob3IoYmxvYjogQmxvYik6IHZvaWQge1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICBhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogbm9uZScpO1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUZvckRvd25sb2FkKSB7XG4gICAgICAgICAgICBibG9iID0gbmV3IEJsb2IoW2Jsb2JdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCghIXRoaXMuZmlsZUZvckRvd25sb2FkID8gdGhpcy5maWxlRm9yRG93bmxvYWQgOiBibG9iKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVGaWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YUZpZWxkLnZhbHVlIHx8ICF0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSBkZWxldGVkLiBObyB0YXNrIGlzIHNldCB0byB0aGUgZmllbGQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFtID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAgICAgcGFyYW0gPSBwYXJhbS5zZXQoXCJwYXJlbnRUYXNrSWRcIiwgdGhpcy5yZXNvbHZlUGFyZW50VGFza0lkKCkpO1xuXG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZGVsZXRlRmlsZSh0aGlzLnRhc2tJZCxcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkLCB1bmRlZmluZWQsIHBhcmFtKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZWYuc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmRvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld1NvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JQcmV2aWV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7ZmlsZW5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZWYubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYERlbGV0aW5nIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IGhhcyBmYWlsZWQhYCwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lICsgJyAnICsgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci5maWxlRGVsZXRlRmFpbGVkJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YUZpZWxkLnZhbHVlIHx8ICF0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZGVmYXVsdFN0YXRlKCk6IEZpbGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgICAgICB1cGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZG93bmxvYWRpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGRpc3BsYXkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0RGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhRmllbGQpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YUZpZWxkLnZhbHVlICYmICEhdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghIXRoaXMuZGF0YUZpZWxkLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLmZpbGUubm9GaWxlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBmaWxlIGZpZWxkIGltYWdlIGZyb20gYmFja2VuZCBpZiBpdCBpcyBpbWFnZSB0eXBlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RmlsZUZpZWxkSW1hZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0ZpbGVCZWZvcmVEb3dubG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZG93bmxvYWRGaWxlUHJldmlldyh0aGlzLnJlc29sdmVQYXJlbnRUYXNrSWQoKSwgdGhpcy5kYXRhRmllbGQuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBQcmV2aWV3IG9mIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvclByZXZpZXcgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdTb3VyY2UgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUZvclByZXZpZXcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEb3dubG9hZGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgKyAnICcgKyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmRvd25sb2FkRmFpbCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja0ZpbGVCZWZvcmVEb3dubG9hZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSBkb3dubG9hZGVkLiBObyB0YXNrIGlzIHNldCB0byB0aGUgZmllbGQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQcmV2aWV3RGlhbG9nKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tGaWxlQmVmb3JlRG93bmxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZG93bmxvYWRGaWxlKHRoaXMucmVzb2x2ZVBhcmVudFRhc2tJZCgpLCB0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmICghKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgfHwgKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgIT09IFByb2dyZXNzVHlwZS5ET1dOTE9BRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5kYXRhRmllbGQudmFsdWUubmFtZX0gd2FzIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RG93bmxvYWRGaWxlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEb3dubG9hZGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgKyAnICcgKyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmRvd25sb2FkRmFpbCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VNYXhXaWR0aChldmVudDogUmVzaXplZEV2ZW50KSB7XG4gICAgICAgIGlmICghIXRoaXMuaW1hZ2VFbCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBldmVudC5uZXdSZWN0LndpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplUHJldmlld0lmRGlzcGxheWFibGUoKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUuc3BsaXQoJy4nKS5yZXZlcnNlKClbMF07XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5YWJsZSA9IE9iamVjdC52YWx1ZXMoRmlsZVByZXZpZXdUeXBlKS5pbmNsdWRlcyhleHRlbnNpb24gYXMgYW55KTtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXh0ZW5zaW9uID0gRmlsZVByZXZpZXdUeXBlW2V4dGVuc2lvbl07XG4gICAgICAgICAgICB0aGlzLmluaXRGaWxlRmllbGRJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmxheW91dCAmJiB0aGlzLmRhdGFGaWVsZC5sYXlvdXQucm93cyAmJiB0aGlzLmRhdGFGaWVsZC5sYXlvdXQucm93cyAhPT0gMSA/XG4gICAgICAgICAgICAodGhpcy5kYXRhRmllbGQubGF5b3V0LnJvd3MpICogRklMRV9GSUVMRF9IRUlHSFQgLSBGSUxFX0ZJRUxEX1BBRERJTkcgOiBGSUxFX0ZJRUxEX0hFSUdIVCAtIEZJTEVfRklFTERfUEFERElORztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJldmlld0JvcmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyV2lkdGgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlcldpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7QWJzdHJhY3RGaWxlRGVmYXVsdEZpZWxkQ29tcG9uZW50LkRFRkFVTFRfUFJFVklFV19CT1JERVJfV0lEVEh9cHhgO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmV2aWV3Qm9yZGVyU3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyUHJvcGVydHlFbmFibGVkKCdib3JkZXJTdHlsZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuYm9yZGVyU3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFic3RyYWN0RmlsZURlZmF1bHRGaWVsZENvbXBvbmVudC5ERUZBVUxUX1BSRVZJRVdfQk9SREVSX1NUWUxFO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmV2aWV3Qm9yZGVyQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyUHJvcGVydHlFbmFibGVkKCdib3JkZXJDb2xvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuYm9yZGVyQ29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFic3RyYWN0RmlsZURlZmF1bHRGaWVsZENvbXBvbmVudC5ERUZBVUxUX1BSRVZJRVdfQk9SREVSX0NPTE9SO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0JvcmRlckxHQlRRKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJQcm9wZXJ0eUVuYWJsZWQoJ2JvcmRlckxHQlRRJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQucHJvcGVydGllcy5ib3JkZXJMR0JUUSA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNCb3JkZXJEZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJQcm9wZXJ0eUVuYWJsZWQoJ2JvcmRlckVuYWJsZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlckVuYWJsZWQgPT09ICd0cnVlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGJvcmRlclByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudCAmJiAhIXRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzICYmIHByb3BlcnR5IGluIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlUGFyZW50VGFza0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YUZpZWxkLnBhcmVudFRhc2tJZCA/IHRoaXMuZGF0YUZpZWxkLnBhcmVudFRhc2tJZCA6IHRoaXMudGFza0lkO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhRmllbGQudGl0bGUgIT09ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNIaW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGFGaWVsZC5kZXNjcmlwdGlvbiAhPT0gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1dFByb3BlcnR5KGkxOG5MYWJlbCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggIT09IGkxOG5MYWJlbC5vZmZzZXRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFdpZHRoID0gaTE4bkxhYmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gJ2NhbGMoMC41ZW0gKyAnICsgaTE4bkxhYmVsLm9mZnNldFdpZHRoIC8gNCAqIDMgKyAncHgpJztcbiAgICAgICAgICAgIHRoaXMuY3V0UHJvcGVydHkgPSBgcG9seWdvbigwIDAsIDAgMTAwJSwgMTAwJSAxMDAlLCAxMDAlIDAlLCAke2NhbGN1bGF0ZWRXaWR0aH0gMCwgJHtjYWxjdWxhdGVkV2lkdGh9IDYlLCAwLjVlbSA2JSwgMC41ZW0gMClgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1dFByb3BlcnR5O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const PREVIEW = 'preview';
|
|
2
|
+
export const PREVIEW_BUTTON = 'preview_button';
|
|
3
|
+
export const FILE_FIELD_HEIGHT = 75;
|
|
4
|
+
export const FILE_FIELD_PADDING = 16;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1maWVsZC1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2RhdGEtZmllbGRzL2ZpbGUtZmllbGQvbW9kZWxzL2ZpbGUtZmllbGQtY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUFJFVklFVyA9ICdwcmV2aWV3JztcblxuZXhwb3J0IGNvbnN0IFBSRVZJRVdfQlVUVE9OID0gJ3ByZXZpZXdfYnV0dG9uJztcblxuZXhwb3J0IGNvbnN0IEZJTEVfRklFTERfSEVJR0hUID0gNzU7XG5cbmV4cG9ydCBjb25zdCBGSUxFX0ZJRUxEX1BBRERJTkcgPSAxNjtcbiJdfQ==
|