@deeksha2309/sunbird-collection-editor 8.0.7
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/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { catchError } from 'rxjs/operators';
|
|
3
|
+
import { Observable, throwError } from 'rxjs';
|
|
4
|
+
import * as _ from 'lodash-es';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/telemetry/telemetry.service";
|
|
7
|
+
import * as i2 from "../../services/config/config.service";
|
|
8
|
+
import * as i3 from "../../services/toaster/toaster.service";
|
|
9
|
+
import * as i4 from "../../services/editor/editor.service";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "@project-sunbird/ng2-semantic-ui";
|
|
12
|
+
import * as i7 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
13
|
+
export class CsvUploadComponent {
|
|
14
|
+
constructor(telemetryService, configService, toasterService, editorService, ngZone) {
|
|
15
|
+
this.telemetryService = telemetryService;
|
|
16
|
+
this.configService = configService;
|
|
17
|
+
this.toasterService = toasterService;
|
|
18
|
+
this.editorService = editorService;
|
|
19
|
+
this.ngZone = ngZone;
|
|
20
|
+
this.csvUploadEmitter = new EventEmitter();
|
|
21
|
+
this.showSuccessCsv = false;
|
|
22
|
+
this.showCsvValidationStatus = false;
|
|
23
|
+
this.isUploadCsvEnable = false;
|
|
24
|
+
this.errorCsvStatus = false;
|
|
25
|
+
this.isClosable = true;
|
|
26
|
+
this.updateCSVFile = false;
|
|
27
|
+
this.uploadCSVFile = false;
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.handleInputCondition();
|
|
31
|
+
}
|
|
32
|
+
handleInputCondition() {
|
|
33
|
+
if (this.isCreateCsv) {
|
|
34
|
+
this.uploadCSVFile = true;
|
|
35
|
+
// tslint:disable-next-line:max-line-length
|
|
36
|
+
this.sampleCsvUrl = _.get(this.editorService, 'editorConfig.config.publicStorageAccount') + _.get(this.configService.urlConFig, 'URLS.CSV.SAMPLE_COLLECTION_HIERARCHY');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.updateCSVFile = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
uploadCSV(event) {
|
|
43
|
+
if (event && event.target && event.target.files) {
|
|
44
|
+
this.file = event.target.files[0];
|
|
45
|
+
this.fileName = this.file.name;
|
|
46
|
+
this.isUploadCsvEnable = true;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.isUploadCsvEnable = false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
updateContentWithURL(fileURL, mimeType, contentId) {
|
|
53
|
+
const data = new FormData();
|
|
54
|
+
data.append('fileUrl', fileURL);
|
|
55
|
+
data.append('mimeType', mimeType);
|
|
56
|
+
const config = {
|
|
57
|
+
enctype: 'multipart/form-data',
|
|
58
|
+
processData: false,
|
|
59
|
+
contentType: false,
|
|
60
|
+
cache: false
|
|
61
|
+
};
|
|
62
|
+
const option = {
|
|
63
|
+
data,
|
|
64
|
+
param: config
|
|
65
|
+
};
|
|
66
|
+
this.editorService.validateCSVFile(option, contentId).subscribe(res => {
|
|
67
|
+
this.ngZone.run(() => {
|
|
68
|
+
this.isClosable = true;
|
|
69
|
+
this.showSuccessCsv = true;
|
|
70
|
+
this.showCsvValidationStatus = false;
|
|
71
|
+
this.csvUploadEmitter.emit({ status: true, type: 'updateHierarchy' });
|
|
72
|
+
});
|
|
73
|
+
}, error => {
|
|
74
|
+
this.ngZone.run(() => {
|
|
75
|
+
this.showCsvValidationStatus = false;
|
|
76
|
+
this.errorCsvStatus = true;
|
|
77
|
+
this.errorCsvMessage = _.get(error, 'error.params.errmsg').split('\n');
|
|
78
|
+
this.isClosable = true;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
closeHierarchyModal(modal) {
|
|
83
|
+
this.resetConditions();
|
|
84
|
+
this.uploadCSVFile = false;
|
|
85
|
+
this.updateCSVFile = false;
|
|
86
|
+
this.csvUploadEmitter.emit({ status: true, type: 'closeModal' });
|
|
87
|
+
modal.deny();
|
|
88
|
+
}
|
|
89
|
+
onClickReupload() {
|
|
90
|
+
if (this.isCreateCsv) {
|
|
91
|
+
this.uploadCSVFile = true;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.updateCSVFile = true;
|
|
95
|
+
}
|
|
96
|
+
this.showCsvValidationStatus = false;
|
|
97
|
+
this.resetConditions();
|
|
98
|
+
}
|
|
99
|
+
resetConditions() {
|
|
100
|
+
this.errorCsvStatus = false;
|
|
101
|
+
this.errorCsvMessage = '';
|
|
102
|
+
this.isUploadCsvEnable = false;
|
|
103
|
+
this.file = null;
|
|
104
|
+
this.fileName = '';
|
|
105
|
+
}
|
|
106
|
+
downloadSampleCSVFile() {
|
|
107
|
+
const downloadConfig = {
|
|
108
|
+
blobUrl: this.sampleCsvUrl,
|
|
109
|
+
successMessage: false,
|
|
110
|
+
fileType: 'csv',
|
|
111
|
+
fileName: this.collectionId
|
|
112
|
+
};
|
|
113
|
+
window.open(downloadConfig.blobUrl, '_blank');
|
|
114
|
+
/*this.editorService.downloadBlobUrlFile(downloadConfig);*/
|
|
115
|
+
}
|
|
116
|
+
uploadToBlob(signedURL, file, config) {
|
|
117
|
+
const csp = _.get(this.editorService.editorConfig, 'context.cloudStorage.provider', 'azure');
|
|
118
|
+
return new Observable((observer) => {
|
|
119
|
+
const uploaderLib = new SunbirdFileUploadLib.FileUploader();
|
|
120
|
+
uploaderLib.upload({ url: signedURL, file, csp })
|
|
121
|
+
.on('error', (error) => {
|
|
122
|
+
const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.018') };
|
|
123
|
+
this.isClosable = true;
|
|
124
|
+
this.errorCsvStatus = true;
|
|
125
|
+
this.showCsvValidationStatus = false;
|
|
126
|
+
this.errorCsvMessage = _.get(error, 'error.params.errmsg') || errInfo.errorMsg;
|
|
127
|
+
observer.error(this.editorService.apiErrorHandling(error, errInfo));
|
|
128
|
+
}).on('completed', (completed) => {
|
|
129
|
+
observer.next(completed);
|
|
130
|
+
observer.complete();
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
validateCSVFile() {
|
|
135
|
+
this.showCsvValidationStatus = true;
|
|
136
|
+
this.uploadCSVFile = false;
|
|
137
|
+
this.isUploadCsvEnable = false;
|
|
138
|
+
this.isClosable = false;
|
|
139
|
+
this.updateCSVFile = false;
|
|
140
|
+
const request = {
|
|
141
|
+
content: {
|
|
142
|
+
fileName: this.fileName
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
this.editorService.generatePreSignedUrl(request, this.collectionId, 'hierarchy').pipe(catchError(err => {
|
|
146
|
+
const errInfo = { errorMsg: _.get(this.configService.labelConfig, 'messages.error.026') };
|
|
147
|
+
this.isClosable = true;
|
|
148
|
+
this.errorCsvStatus = true;
|
|
149
|
+
this.showCsvValidationStatus = false;
|
|
150
|
+
this.errorCsvMessage = _.get(err, 'error.params.errmsg') || errInfo.errorMsg;
|
|
151
|
+
return throwError(this.editorService.apiErrorHandling(err, errInfo));
|
|
152
|
+
})).subscribe((response) => {
|
|
153
|
+
const signedURL = _.get(response.result, 'pre_signed_url');
|
|
154
|
+
let blobConfig = {
|
|
155
|
+
processData: false,
|
|
156
|
+
contentType: 'text/csv'
|
|
157
|
+
};
|
|
158
|
+
blobConfig = this.editorService.appendCloudStorageHeaders(blobConfig);
|
|
159
|
+
this.uploadToBlob(signedURL, this.file, blobConfig).subscribe(() => {
|
|
160
|
+
const fileURL = signedURL.split('?')[0];
|
|
161
|
+
this.updateContentWithURL(fileURL, this.file.type, this.collectionId);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CsvUploadComponent, deps: [{ token: i1.EditorTelemetryService }, { token: i2.ConfigService }, { token: i3.ToasterService }, { token: i4.EditorService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CsvUploadComponent, selector: "lib-csv-upload", inputs: { collectionId: "collectionId", isCreateCsv: "isCreateCsv" }, outputs: { csvUploadEmitter: "csvUploadEmitter" }, ngImport: i0, template: "<sui-modal [mustScroll]=\"true\" [isClosable]=\"isClosable\" [transitionDuration]=\"0\" [size]=\"'normal'\"\n class=\"sb-modal bx-none overflow-modal\" appBodyScroll (dismissed)=\"closeHierarchyModal(modal)\" #modal>\n <div class=\"sb-modal-header\">\n <span *ngIf=\"isCreateCsv\"> {{configService.labelConfig?.lbl?.createHierarchyCsv}} </span>\n <span *ngIf=\"!isCreateCsv\"> {{configService.labelConfig?.lbl?.uploadUpdateCSV}}</span> \n\n </div>\n <div class=\"sb-modal-content\">\n <div>\n <!-- upload csv file -->\n <div class=\"d-flex\" *ngIf=\"uploadCSVFile\">\n <div class=\"pl-20 pt-20 d-block w-50\">\n <p>{{configService.labelConfig?.lbl?.downloadSampleHierarchyCSv}} </p>\n <div class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.makeSureFile}} </div>\n <ul class=\"ui ordered list sb-dock-ordered-list mt-15\">\n <li class=\"item\">{{configService.labelConfig?.lbl?.allColumnsAreAvailable}}</li>\n <li class=\"item\">{{configService.labelConfig?.lbl?.hasAllMandatoryColumn}}</li>\n <li class=\"item\">{{configService.labelConfig?.lbl?.noDuplicateRow}}</li>\n </ul>\n <a target=\"_blank\" (click)=\"downloadSampleCSVFile()\"\n class=\"sb-btn sb-btn-normal sb-btn-outline-primary my-20 text-decor-none sb-color-primary\"><i\n aria-hidden=\"true\" class=\"fa fa-download pr-10\"></i>{{configService.labelConfig?.lbl?.downloadSampleCSV}}</a>\n </div>\n <div class=\"p-10 w-60 text-center sb-bg-color-primary-0 sb-br-primary\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-20 pb-10\">\n <div id=\"qq-upload-actions\" class=\"upload-file-description d-flex flex-ai-center flex-dc\">\n <h5 class=\"mb-8 sb-color-gray-400\">\n {{configService.labelConfig?.lbl?.dragAndDropCSV}} <br />\n </h5>\n <h6 class=\"mb-8 sb-color-gray-400 mt-10\">{{configService.labelConfig?.lbl?.Or}}</h6>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_upload','click',configService.labelConfig?.lbl?.selectFileToUpload,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n ><i aria-hidden=\"true\" class=\"icon upload\"></i>\n {{configService.labelConfig?.lbl?.selectFileToUpload}} \n <input (change)=\"uploadCSV($event)\" accept=\".csv\" type=\"file\" >\n </button>\n <p class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.uploadEntries}}</p>\n <span class=\"sb-color-primary fs-0-785\" *ngIf=\"fileName\">{{fileName}}</span>\n </div>\n </div>\n </div> \n <!-- update csv file -->\n <div class=\"p-20 text-center sb-bg-color-primary-0 sb-br-primary\" *ngIf=\"updateCSVFile\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-10 pb-10\">\n <div id=\"qq-upload-actions\" class=\"upload-file-description d-flex flex-ai-center flex-dc\">\n <h5 class=\"mb-8 sb-color-gray-400\">\n {{configService.labelConfig?.lbl?.dragAndDropCSV}}<br />\n </h5>\n <h6 class=\"mb-8 sb-color-gray-400 mt-10\">{{configService.labelConfig?.lbl?.Or}}</h6>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_update','click',configService.labelConfig?.lbl?.selectFileToUpload,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n ><i aria-hidden=\"true\" class=\"icon upload\"></i>\n {{configService.labelConfig?.lbl?.selectFileToUpload}} \n <input (change)=\"uploadCSV($event)\" accept=\".csv\" type=\"file\" >\n </button>\n <p class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.uploadEntries}}</p>\n <span class=\"sb-color-primary fs-0-785\" *ngIf=\"fileName\">{{fileName}}</span>\n </div>\n </div>\n <div *ngIf=\"updateCSVFile\" class=\"py-20\"><i aria-hidden=\"true\" class=\"icon info circle pr-10 sb-color-gray-200\"></i> \n <span class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.csvDownloadInstruction}}</span></div>\n <!-- Validation message -->\n <div class=\"d-flex sb-min-h-250 flex-ai-center mn-15 sb-bg-color-primary-0\" *ngIf=\"showCsvValidationStatus\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50\">\n <div class=\"pos-relative\">\n <span class=\"sb-loader sb-success-loader\"></span>\n <div class=\"font-weight-bold mb-10\">\n {{configService.labelConfig?.lbl?.pleaseWait}}\n </div>\n <span class=\"sb-color-gray-400 \"> {{configService.labelConfig?.lbl?.validateCsvFile}}</span>\n </div>\n </div>\n </div>\n\n <!-- Validation failed message = 4 -->\n <div class=\"d-flex sb-min-h-250 flex-ai-center\" *ngIf=\"errorCsvStatus\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50\">\n <i class=\"fa fa-exclamation-triangle pr-5 sb-color-error pr-10\" aria-hidden=\"true\"></i> {{configService.labelConfig?.lbl?.hierarchyValidationError}}\n <div class=\"sb-color-gray-200 pt-20 fs-0-785\"> {{configService.labelConfig?.lbl?.followingErrors}}</div>\n <ul class=\"mt-15 sb-circle-ul\">\n <li class=\"item\" *ngFor=\"let error of errorCsvMessage\">{{error}}</li>\n </ul>\n <div class=\"qq-upload-button-selector sb-btn sb-btn-normal sb-btn-success my-20\" \n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_reupload','click',configService.labelConfig?.lbl?.reUploadCSV,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"onClickReupload()\">\n <div><i aria-hidden=\"true\" class=\"icon refresh\"></i>{{configService.labelConfig?.lbl?.reUploadCSV}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex sb-bg-color-success-0 p-10 sb-min-h-250 mn-15\" *ngIf=\"showSuccessCsv\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50 flex-ai-center\">\n <div class=\"d-flex\">\n <i class=\"icon check circle outline sb-color-success\" aria-hidden=\"true\"></i>\n <div>\n <span *ngIf=\"isCreateCsv\" class=\"fs-0-92\"> {{configService.labelConfig?.lbl?.hierarchyAdded}} </span>\n <span *ngIf=\"!isCreateCsv\" class=\"fs-0-92\"> {{configService.labelConfig?.lbl?.hierarchyUpdated}} </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions\">\n <button class=\"sb-btn sb-btn-normal \" \n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('close_popup','click',configService.labelConfig?.button_labels?.close_btn_label,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"closeHierarchyModal(modal)\"[disabled]=\"!isClosable\" \n [ngClass]=\"{'sb-btn-primary': isClosable, 'sb-btn-disabled': !isClosable}\" >\n {{configService.labelConfig?.button_labels?.close_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal \"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('csv_upload','click',configService.labelConfig?.button_labels?.next_btn_label,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"validateCSVFile()\"[disabled]=\"!isUploadCsvEnable\" \n [ngClass]=\"{'sb-btn-primary': isUploadCsvEnable, 'sb-btn-disabled': !isUploadCsvEnable}\" >\n {{configService.labelConfig?.button_labels?.next_btn_label}}\n </button>\n </div>\n</sui-modal>", styles: [".sb-dock-ordered-list li{margin-bottom:.4rem;font-size:.8rem;color:var(--gray-200)!important}.sb-dock-ordered-list li:before{width:1rem;height:1rem;line-height:1rem;border-radius:100%;text-align:center!important;background-color:var(--primary-200);font-size:.6rem;color:var(--white)!important;margin-right:.8rem}.sb-circle-download-icon{background:var(--secondary-100);display:inline-block;width:1.8rem;height:1.8rem;line-height:1.8rem;color:var(--white);border-radius:100%;text-align:center;font-size:.8rem}.sb-list-circle li{list-style-type:disc;font-size:.8rem;margin-bottom:.6rem}.sb-line-height-1-2{line-height:1.2rem}.sb-success-loader{position:absolute!important;top:46%!important;left:50%!important;transform:translate(-46%,-50%)!important}.sb-success-loader:after{width:1.2rem!important;height:1.2rem!important}.sb-dock-loader{position:absolute;top:15%;left:-1%;transform:translate(-50%,-50%)}.sb-bulk-upload img{width:11rem}.sb-bulk-upload img .sb-dock-accordion .sb-toc-accor-1:last-child .title{border-bottom:1px solid var(--gray-100)!important}.sb-bulk-upload img .sb-dock-accordion .title{border:1px solid var(--gray-100)!important;margin:0!important;border-bottom:none!important;border-radius:0!important}.sb-bulk-upload img .sb-dock-accordion .content{border:1px solid var(--gray-100)}.sb-bulk-upload img .sb-dock-accordion .content:last-child{border-bottom:1px solid var(--gray-100)!important}.sb-bulk-upload img .sb-dock-accordion .sb-radio-btn-checkbox label:before{width:1.4rem;height:1.4rem}.sb-bulk-upload img .sb-dock-accordion .sb-radio-btn-checkbox label:after{height:.9rem;width:.9rem}.sb-bulk-upload img .sb-dock-accordion.scrolling.content{max-height:70vh!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.SuiDropdownMenuItem, selector: ".item" }, { kind: "component", type: i6.SuiModal, selector: "sui-modal", inputs: ["isClosable", "closeResult", "size", "isCentered", "isFullScreen", "isBasic", "mustScroll", "isInverted", "transition", "transitionDuration"], outputs: ["approved", "denied", "dismissed"] }, { kind: "directive", type: i7.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }] }); }
|
|
167
|
+
}
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CsvUploadComponent, decorators: [{
|
|
169
|
+
type: Component,
|
|
170
|
+
args: [{ selector: 'lib-csv-upload', template: "<sui-modal [mustScroll]=\"true\" [isClosable]=\"isClosable\" [transitionDuration]=\"0\" [size]=\"'normal'\"\n class=\"sb-modal bx-none overflow-modal\" appBodyScroll (dismissed)=\"closeHierarchyModal(modal)\" #modal>\n <div class=\"sb-modal-header\">\n <span *ngIf=\"isCreateCsv\"> {{configService.labelConfig?.lbl?.createHierarchyCsv}} </span>\n <span *ngIf=\"!isCreateCsv\"> {{configService.labelConfig?.lbl?.uploadUpdateCSV}}</span> \n\n </div>\n <div class=\"sb-modal-content\">\n <div>\n <!-- upload csv file -->\n <div class=\"d-flex\" *ngIf=\"uploadCSVFile\">\n <div class=\"pl-20 pt-20 d-block w-50\">\n <p>{{configService.labelConfig?.lbl?.downloadSampleHierarchyCSv}} </p>\n <div class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.makeSureFile}} </div>\n <ul class=\"ui ordered list sb-dock-ordered-list mt-15\">\n <li class=\"item\">{{configService.labelConfig?.lbl?.allColumnsAreAvailable}}</li>\n <li class=\"item\">{{configService.labelConfig?.lbl?.hasAllMandatoryColumn}}</li>\n <li class=\"item\">{{configService.labelConfig?.lbl?.noDuplicateRow}}</li>\n </ul>\n <a target=\"_blank\" (click)=\"downloadSampleCSVFile()\"\n class=\"sb-btn sb-btn-normal sb-btn-outline-primary my-20 text-decor-none sb-color-primary\"><i\n aria-hidden=\"true\" class=\"fa fa-download pr-10\"></i>{{configService.labelConfig?.lbl?.downloadSampleCSV}}</a>\n </div>\n <div class=\"p-10 w-60 text-center sb-bg-color-primary-0 sb-br-primary\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-20 pb-10\">\n <div id=\"qq-upload-actions\" class=\"upload-file-description d-flex flex-ai-center flex-dc\">\n <h5 class=\"mb-8 sb-color-gray-400\">\n {{configService.labelConfig?.lbl?.dragAndDropCSV}} <br />\n </h5>\n <h6 class=\"mb-8 sb-color-gray-400 mt-10\">{{configService.labelConfig?.lbl?.Or}}</h6>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_upload','click',configService.labelConfig?.lbl?.selectFileToUpload,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n ><i aria-hidden=\"true\" class=\"icon upload\"></i>\n {{configService.labelConfig?.lbl?.selectFileToUpload}} \n <input (change)=\"uploadCSV($event)\" accept=\".csv\" type=\"file\" >\n </button>\n <p class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.uploadEntries}}</p>\n <span class=\"sb-color-primary fs-0-785\" *ngIf=\"fileName\">{{fileName}}</span>\n </div>\n </div>\n </div> \n <!-- update csv file -->\n <div class=\"p-20 text-center sb-bg-color-primary-0 sb-br-primary\" *ngIf=\"updateCSVFile\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-10 pb-10\">\n <div id=\"qq-upload-actions\" class=\"upload-file-description d-flex flex-ai-center flex-dc\">\n <h5 class=\"mb-8 sb-color-gray-400\">\n {{configService.labelConfig?.lbl?.dragAndDropCSV}}<br />\n </h5>\n <h6 class=\"mb-8 sb-color-gray-400 mt-10\">{{configService.labelConfig?.lbl?.Or}}</h6>\n <button class=\"upload-input-button sb-btn sb-btn-success sb-btn-normal\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_update','click',configService.labelConfig?.lbl?.selectFileToUpload,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n ><i aria-hidden=\"true\" class=\"icon upload\"></i>\n {{configService.labelConfig?.lbl?.selectFileToUpload}} \n <input (change)=\"uploadCSV($event)\" accept=\".csv\" type=\"file\" >\n </button>\n <p class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.uploadEntries}}</p>\n <span class=\"sb-color-primary fs-0-785\" *ngIf=\"fileName\">{{fileName}}</span>\n </div>\n </div>\n <div *ngIf=\"updateCSVFile\" class=\"py-20\"><i aria-hidden=\"true\" class=\"icon info circle pr-10 sb-color-gray-200\"></i> \n <span class=\"sb-color-gray-200 fs-0-785\">{{configService.labelConfig?.lbl?.csvDownloadInstruction}}</span></div>\n <!-- Validation message -->\n <div class=\"d-flex sb-min-h-250 flex-ai-center mn-15 sb-bg-color-primary-0\" *ngIf=\"showCsvValidationStatus\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50\">\n <div class=\"pos-relative\">\n <span class=\"sb-loader sb-success-loader\"></span>\n <div class=\"font-weight-bold mb-10\">\n {{configService.labelConfig?.lbl?.pleaseWait}}\n </div>\n <span class=\"sb-color-gray-400 \"> {{configService.labelConfig?.lbl?.validateCsvFile}}</span>\n </div>\n </div>\n </div>\n\n <!-- Validation failed message = 4 -->\n <div class=\"d-flex sb-min-h-250 flex-ai-center\" *ngIf=\"errorCsvStatus\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50\">\n <i class=\"fa fa-exclamation-triangle pr-5 sb-color-error pr-10\" aria-hidden=\"true\"></i> {{configService.labelConfig?.lbl?.hierarchyValidationError}}\n <div class=\"sb-color-gray-200 pt-20 fs-0-785\"> {{configService.labelConfig?.lbl?.followingErrors}}</div>\n <ul class=\"mt-15 sb-circle-ul\">\n <li class=\"item\" *ngFor=\"let error of errorCsvMessage\">{{error}}</li>\n </ul>\n <div class=\"qq-upload-button-selector sb-btn sb-btn-normal sb-btn-success my-20\" \n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('select_csv_reupload','click',configService.labelConfig?.lbl?.reUploadCSV,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"onClickReupload()\">\n <div><i aria-hidden=\"true\" class=\"icon refresh\"></i>{{configService.labelConfig?.lbl?.reUploadCSV}}</div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex sb-bg-color-success-0 p-10 sb-min-h-250 mn-15\" *ngIf=\"showSuccessCsv\">\n <div class=\"w-50 text-center\">\n <img src=\"../../assets/images/bulkuploadfile.png\" alt=\"\" class=\"w-30\">\n </div>\n <div class=\"w-50 flex-ai-center\">\n <div class=\"d-flex\">\n <i class=\"icon check circle outline sb-color-success\" aria-hidden=\"true\"></i>\n <div>\n <span *ngIf=\"isCreateCsv\" class=\"fs-0-92\"> {{configService.labelConfig?.lbl?.hierarchyAdded}} </span>\n <span *ngIf=\"!isCreateCsv\" class=\"fs-0-92\"> {{configService.labelConfig?.lbl?.hierarchyUpdated}} </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions\">\n <button class=\"sb-btn sb-btn-normal \" \n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('close_popup','click',configService.labelConfig?.button_labels?.close_btn_label,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"closeHierarchyModal(modal)\"[disabled]=\"!isClosable\" \n [ngClass]=\"{'sb-btn-primary': isClosable, 'sb-btn-disabled': !isClosable}\" >\n {{configService.labelConfig?.button_labels?.close_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal \"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('csv_upload','click',configService.labelConfig?.button_labels?.next_btn_label,\n this.telemetryService.telemetryPageId, {key: 'identifier', value: collectionId})\"\n (click)=\"validateCSVFile()\"[disabled]=\"!isUploadCsvEnable\" \n [ngClass]=\"{'sb-btn-primary': isUploadCsvEnable, 'sb-btn-disabled': !isUploadCsvEnable}\" >\n {{configService.labelConfig?.button_labels?.next_btn_label}}\n </button>\n </div>\n</sui-modal>", styles: [".sb-dock-ordered-list li{margin-bottom:.4rem;font-size:.8rem;color:var(--gray-200)!important}.sb-dock-ordered-list li:before{width:1rem;height:1rem;line-height:1rem;border-radius:100%;text-align:center!important;background-color:var(--primary-200);font-size:.6rem;color:var(--white)!important;margin-right:.8rem}.sb-circle-download-icon{background:var(--secondary-100);display:inline-block;width:1.8rem;height:1.8rem;line-height:1.8rem;color:var(--white);border-radius:100%;text-align:center;font-size:.8rem}.sb-list-circle li{list-style-type:disc;font-size:.8rem;margin-bottom:.6rem}.sb-line-height-1-2{line-height:1.2rem}.sb-success-loader{position:absolute!important;top:46%!important;left:50%!important;transform:translate(-46%,-50%)!important}.sb-success-loader:after{width:1.2rem!important;height:1.2rem!important}.sb-dock-loader{position:absolute;top:15%;left:-1%;transform:translate(-50%,-50%)}.sb-bulk-upload img{width:11rem}.sb-bulk-upload img .sb-dock-accordion .sb-toc-accor-1:last-child .title{border-bottom:1px solid var(--gray-100)!important}.sb-bulk-upload img .sb-dock-accordion .title{border:1px solid var(--gray-100)!important;margin:0!important;border-bottom:none!important;border-radius:0!important}.sb-bulk-upload img .sb-dock-accordion .content{border:1px solid var(--gray-100)}.sb-bulk-upload img .sb-dock-accordion .content:last-child{border-bottom:1px solid var(--gray-100)!important}.sb-bulk-upload img .sb-dock-accordion .sb-radio-btn-checkbox label:before{width:1.4rem;height:1.4rem}.sb-bulk-upload img .sb-dock-accordion .sb-radio-btn-checkbox label:after{height:.9rem;width:.9rem}.sb-bulk-upload img .sb-dock-accordion.scrolling.content{max-height:70vh!important}\n"] }]
|
|
171
|
+
}], ctorParameters: function () { return [{ type: i1.EditorTelemetryService }, { type: i2.ConfigService }, { type: i3.ToasterService }, { type: i4.EditorService }, { type: i0.NgZone }]; }, propDecorators: { collectionId: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], isCreateCsv: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], csvUploadEmitter: [{
|
|
176
|
+
type: Output
|
|
177
|
+
}] } });
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9jc3YtdXBsb2FkL2Nzdi11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY3N2LXVwbG9hZC9jc3YtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFLdkYsT0FBTyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFRL0IsTUFBTSxPQUFPLGtCQUFrQjtJQWU3QixZQUFtQixnQkFBd0MsRUFBUyxhQUE0QixFQUM1RSxjQUE4QixFQUFVLGFBQTRCLEVBQVUsTUFBYztRQUQ3RixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBYnRHLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBSXVGLENBQUM7SUFFckgsUUFBUTtRQUNOLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSwwQ0FBMEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztTQUN6SzthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQUs7UUFDYixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUztRQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHO1lBQ2IsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRztZQUNiLElBQUk7WUFDSixLQUFLLEVBQUUsTUFBTTtTQUNkLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNqRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELHFCQUFxQjtRQUNuQixNQUFNLGNBQWMsR0FBRztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDMUIsY0FBYyxFQUFFLEtBQUs7WUFDckIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDNUIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QywyREFBMkQ7SUFDN0QsQ0FBQztJQUNELFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU07UUFDbEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSwrQkFBK0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1RCxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQ2hELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDckIsTUFBTSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFDLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQy9FLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRyxNQUFNLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzdFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRCxJQUFJLFVBQVUsR0FBRztnQkFDZixXQUFXLEVBQUUsS0FBSztnQkFDbEIsV0FBVyxFQUFFLFVBQVU7YUFDeEIsQ0FBQztZQUNGLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDakUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBdkpVLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtLQ2YvQiwralJBd0lZOzs0RkR6SEMsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQjt1TkFLakIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVsZW1ldHJ5L3RlbGVtZXRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3Rlci90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5kZWNsYXJlIGNvbnN0IFN1bmJpcmRGaWxlVXBsb2FkTGliOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jc3YtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nzdi11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jc3YtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3N2VXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29sbGVjdGlvbklkO1xuICBASW5wdXQoKSBpc0NyZWF0ZUNzdjtcbiAgQE91dHB1dCgpIGNzdlVwbG9hZEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIHNob3dTdWNjZXNzQ3N2ID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Q3N2VmFsaWRhdGlvblN0YXR1cyA9IGZhbHNlO1xuICBwdWJsaWMgaXNVcGxvYWRDc3ZFbmFibGUgPSBmYWxzZTtcbiAgcHVibGljIGVycm9yQ3N2U3RhdHVzID0gZmFsc2U7XG4gIHB1YmxpYyBlcnJvckNzdk1lc3NhZ2U6IGFueTtcbiAgcHVibGljIGlzQ2xvc2FibGUgPSB0cnVlO1xuICBwdWJsaWMgc2FtcGxlQ3N2VXJsOiBhbnk7XG4gIHB1YmxpYyB1cGRhdGVDU1ZGaWxlID0gZmFsc2U7XG4gIHB1YmxpYyB1cGxvYWRDU1ZGaWxlID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlTmFtZTogYW55O1xuICBwdWJsaWMgZmlsZTogYW55O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVsZW1ldHJ5U2VydmljZTogRWRpdG9yVGVsZW1ldHJ5U2VydmljZSwgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSW5wdXRDb25kaXRpb24oKTtcbiAgfVxuICBoYW5kbGVJbnB1dENvbmRpdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0NyZWF0ZUNzdikge1xuICAgICAgdGhpcy51cGxvYWRDU1ZGaWxlID0gdHJ1ZTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIHRoaXMuc2FtcGxlQ3N2VXJsID0gXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbmZpZy5wdWJsaWNTdG9yYWdlQWNjb3VudCcpICsgXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuQ1NWLlNBTVBMRV9DT0xMRUNUSU9OX0hJRVJBUkNIWScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNTVkZpbGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICB1cGxvYWRDU1YoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcykge1xuICAgICAgdGhpcy5maWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuZmlsZS5uYW1lO1xuICAgICAgdGhpcy5pc1VwbG9hZENzdkVuYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNVcGxvYWRDc3ZFbmFibGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250ZW50V2l0aFVSTChmaWxlVVJMLCBtaW1lVHlwZSwgY29udGVudElkKSB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGRhdGEuYXBwZW5kKCdmaWxlVXJsJywgZmlsZVVSTCk7XG4gICAgZGF0YS5hcHBlbmQoJ21pbWVUeXBlJywgbWltZVR5cGUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGVuY3R5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtOiBjb25maWdcbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS52YWxpZGF0ZUNTVkZpbGUob3B0aW9uLCBjb250ZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0Nsb3NhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzc0NzdiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0NzdlZhbGlkYXRpb25TdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jc3ZVcGxvYWRFbWl0dGVyLmVtaXQoeyBzdGF0dXM6IHRydWUsIHR5cGU6ICd1cGRhdGVIaWVyYXJjaHknIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93Q3N2VmFsaWRhdGlvblN0YXR1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yQ3N2U3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lcnJvckNzdk1lc3NhZ2UgPSBfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIHRoaXMuaXNDbG9zYWJsZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBjbG9zZUhpZXJhcmNoeU1vZGFsKG1vZGFsKSB7XG4gICAgdGhpcy5yZXNldENvbmRpdGlvbnMoKTtcbiAgICB0aGlzLnVwbG9hZENTVkZpbGUgPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZUNTVkZpbGUgPSBmYWxzZTtcbiAgICB0aGlzLmNzdlVwbG9hZEVtaXR0ZXIuZW1pdCh7IHN0YXR1czogdHJ1ZSwgdHlwZTogJ2Nsb3NlTW9kYWwnIH0pO1xuICAgIG1vZGFsLmRlbnkoKTtcbiAgfVxuICBvbkNsaWNrUmV1cGxvYWQoKSB7XG4gICAgaWYgKHRoaXMuaXNDcmVhdGVDc3YpIHtcbiAgICAgIHRoaXMudXBsb2FkQ1NWRmlsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQ1NWRmlsZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0NzdlZhbGlkYXRpb25TdGF0dXMgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0Q29uZGl0aW9ucygpO1xuICB9XG4gIHJlc2V0Q29uZGl0aW9ucygpIHtcbiAgICB0aGlzLmVycm9yQ3N2U3RhdHVzID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvckNzdk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmlzVXBsb2FkQ3N2RW5hYmxlID0gZmFsc2U7XG4gICAgdGhpcy5maWxlID0gbnVsbDtcbiAgICB0aGlzLmZpbGVOYW1lID0gJyc7XG4gIH1cbiAgZG93bmxvYWRTYW1wbGVDU1ZGaWxlKCkge1xuICAgIGNvbnN0IGRvd25sb2FkQ29uZmlnID0ge1xuICAgICAgYmxvYlVybDogdGhpcy5zYW1wbGVDc3ZVcmwsXG4gICAgICBzdWNjZXNzTWVzc2FnZTogZmFsc2UsXG4gICAgICBmaWxlVHlwZTogJ2NzdicsXG4gICAgICBmaWxlTmFtZTogdGhpcy5jb2xsZWN0aW9uSWRcbiAgICB9O1xuICAgIHdpbmRvdy5vcGVuKGRvd25sb2FkQ29uZmlnLmJsb2JVcmwsICdfYmxhbmsnKTtcbiAgICAvKnRoaXMuZWRpdG9yU2VydmljZS5kb3dubG9hZEJsb2JVcmxGaWxlKGRvd25sb2FkQ29uZmlnKTsqL1xuICB9XG4gIHVwbG9hZFRvQmxvYihzaWduZWRVUkwsIGZpbGUsIGNvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgY3NwID0gXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQuY2xvdWRTdG9yYWdlLnByb3ZpZGVyJywgJ2F6dXJlJyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkZXJMaWIgPSBuZXcgU3VuYmlyZEZpbGVVcGxvYWRMaWIuRmlsZVVwbG9hZGVyKCk7XG4gICAgICB1cGxvYWRlckxpYi51cGxvYWQoeyB1cmw6IHNpZ25lZFVSTCwgZmlsZSwgY3NwIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVyckluZm8gPSB7IGVycm9yTXNnOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWcsICdtZXNzYWdlcy5lcnJvci4wMTgnKX07XG4gICAgICAgIHRoaXMuaXNDbG9zYWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZXJyb3JDc3ZTdGF0dXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dDc3ZWYWxpZGF0aW9uU3RhdHVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3JDc3ZNZXNzYWdlID0gXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgZXJySW5mby5lcnJvck1zZztcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyb3IsIGVyckluZm8pKTtcbiAgICAgIH0pLm9uKCdjb21wbGV0ZWQnLCAoY29tcGxldGVkKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoY29tcGxldGVkKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHZhbGlkYXRlQ1NWRmlsZSgpIHtcbiAgICB0aGlzLnNob3dDc3ZWYWxpZGF0aW9uU3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLnVwbG9hZENTVkZpbGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzVXBsb2FkQ3N2RW5hYmxlID0gZmFsc2U7XG4gICAgdGhpcy5pc0Nsb3NhYmxlID0gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVDU1ZGaWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZW5lcmF0ZVByZVNpZ25lZFVybChyZXF1ZXN0LCB0aGlzLmNvbGxlY3Rpb25JZCwgJ2hpZXJhcmNoeScpLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgY29uc3QgZXJySW5mbyA9IHsgZXJyb3JNc2c6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZywgJ21lc3NhZ2VzLmVycm9yLjAyNicpIH07XG4gICAgICB0aGlzLmlzQ2xvc2FibGUgPSB0cnVlO1xuICAgICAgdGhpcy5lcnJvckNzdlN0YXR1cyA9IHRydWU7XG4gICAgICB0aGlzLnNob3dDc3ZWYWxpZGF0aW9uU3RhdHVzID0gZmFsc2U7XG4gICAgICB0aGlzLmVycm9yQ3N2TWVzc2FnZSA9IF8uZ2V0KGVyciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCBlcnJJbmZvLmVycm9yTXNnO1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IodGhpcy5lZGl0b3JTZXJ2aWNlLmFwaUVycm9ySGFuZGxpbmcoZXJyLCBlcnJJbmZvKSk7XG4gICAgfSkpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25lZFVSTCA9IF8uZ2V0KHJlc3BvbnNlLnJlc3VsdCwgJ3ByZV9zaWduZWRfdXJsJyk7XG4gICAgICBsZXQgYmxvYkNvbmZpZyA9IHtcbiAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICBjb250ZW50VHlwZTogJ3RleHQvY3N2J1xuICAgICAgfTtcbiAgICAgIGJsb2JDb25maWcgPSB0aGlzLmVkaXRvclNlcnZpY2UuYXBwZW5kQ2xvdWRTdG9yYWdlSGVhZGVycyhibG9iQ29uZmlnKTtcbiAgICAgIHRoaXMudXBsb2FkVG9CbG9iKHNpZ25lZFVSTCwgdGhpcy5maWxlLCBibG9iQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlVVJMID0gc2lnbmVkVVJMLnNwbGl0KCc/JylbMF07XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGVudFdpdGhVUkwoZmlsZVVSTCwgdGhpcy5maWxlLnR5cGUsIHRoaXMuY29sbGVjdGlvbklkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8c3VpLW1vZGFsICBbbXVzdFNjcm9sbF09XCJ0cnVlXCIgW2lzQ2xvc2FibGVdPVwiaXNDbG9zYWJsZVwiIFt0cmFuc2l0aW9uRHVyYXRpb25dPVwiMFwiIFtzaXplXT1cIidub3JtYWwnXCJcbiAgICBjbGFzcz1cInNiLW1vZGFsIGJ4LW5vbmUgb3ZlcmZsb3ctbW9kYWxcIiBhcHBCb2R5U2Nyb2xsIChkaXNtaXNzZWQpPVwiY2xvc2VIaWVyYXJjaHlNb2RhbChtb2RhbClcIiAjbW9kYWw+XG4gICAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWhlYWRlclwiPlxuICAgICA8c3BhbiAqbmdJZj1cImlzQ3JlYXRlQ3N2XCI+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5jcmVhdGVIaWVyYXJjaHlDc3Z9fSA8L3NwYW4+XG4gICAgIDxzcGFuICpuZ0lmPVwiIWlzQ3JlYXRlQ3N2XCI+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy51cGxvYWRVcGRhdGVDU1Z9fTwvc3Bhbj4gIFxuXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWNvbnRlbnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDwhLS0gdXBsb2FkIGNzdiBmaWxlICAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwidXBsb2FkQ1NWRmlsZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0yMCBwdC0yMCBkLWJsb2NrIHctNTBcIj5cbiAgICAgICAgICAgIDxwPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5kb3dubG9hZFNhbXBsZUhpZXJhcmNoeUNTdn19IDwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1jb2xvci1ncmF5LTIwMCBmcy0wLTc4NVwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5tYWtlU3VyZUZpbGV9fSA8L2Rpdj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInVpIG9yZGVyZWQgbGlzdCBzYi1kb2NrLW9yZGVyZWQtbGlzdCBtdC0xNVwiPlxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJpdGVtXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmFsbENvbHVtbnNBcmVBdmFpbGFibGV9fTwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cIml0ZW1cIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uaGFzQWxsTWFuZGF0b3J5Q29sdW1ufX08L2xpPlxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJpdGVtXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/Lm5vRHVwbGljYXRlUm93fX08L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiICAoY2xpY2spPVwiZG93bmxvYWRTYW1wbGVDU1ZGaWxlKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgbXktMjAgdGV4dC1kZWNvci1ub25lIHNiLWNvbG9yLXByaW1hcnlcIj48aVxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiAgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBwci0xMFwiPjwvaT57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uZG93bmxvYWRTYW1wbGVDU1Z9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xMCB3LTYwIHRleHQtY2VudGVyIHNiLWJnLWNvbG9yLXByaW1hcnktMCBzYi1ici1wcmltYXJ5XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi4uLy4uL2Fzc2V0cy9pbWFnZXMvYnVsa3VwbG9hZGZpbGUucG5nXCIgYWx0PVwiXCIgY2xhc3M9XCJ3LTIwIHBiLTEwXCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwicXEtdXBsb2FkLWFjdGlvbnNcIiBjbGFzcz1cInVwbG9hZC1maWxlLWRlc2NyaXB0aW9uIGQtZmxleCBmbGV4LWFpLWNlbnRlciBmbGV4LWRjXCI+XG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTggc2ItY29sb3ItZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uZHJhZ0FuZERyb3BDU1Z9fSA8YnIgLz5cbiAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItOCBzYi1jb2xvci1ncmF5LTQwMCBtdC0xMFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5Pcn19PC9oNj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVwbG9hZC1pbnB1dC1idXR0b24gc2ItYnRuIHNiLWJ0bi1zdWNjZXNzIHNiLWJ0bi1ub3JtYWxcIlxuICAgICAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3NlbGVjdF9jc3ZfdXBsb2FkJywnY2xpY2snLGNvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uc2VsZWN0RmlsZVRvVXBsb2FkLFxuICAgICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZCwge2tleTogJ2lkZW50aWZpZXInLCB2YWx1ZTogY29sbGVjdGlvbklkfSlcIlxuICAgICAgICAgICAgICA+PGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uIHVwbG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uc2VsZWN0RmlsZVRvVXBsb2FkfX0gIFxuICAgICAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cInVwbG9hZENTVigkZXZlbnQpXCIgYWNjZXB0PVwiLmNzdlwiIHR5cGU9XCJmaWxlXCIgPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzYi1jb2xvci1ncmF5LTIwMCBmcy0wLTc4NVwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy51cGxvYWRFbnRyaWVzfX08L3A+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2ItY29sb3ItcHJpbWFyeSBmcy0wLTc4NVwiICpuZ0lmPVwiZmlsZU5hbWVcIj57e2ZpbGVOYW1lfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gIFxuICAgICAgICA8IS0tIHVwZGF0ZSBjc3YgZmlsZSAgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTIwICB0ZXh0LWNlbnRlciBzYi1iZy1jb2xvci1wcmltYXJ5LTAgc2ItYnItcHJpbWFyeVwiICpuZ0lmPVwidXBkYXRlQ1NWRmlsZVwiPlxuICAgICAgICAgIDxpbWcgc3JjPVwiLi4vLi4vYXNzZXRzL2ltYWdlcy9idWxrdXBsb2FkZmlsZS5wbmdcIiBhbHQ9XCJcIiBjbGFzcz1cInctMTAgcGItMTBcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwicXEtdXBsb2FkLWFjdGlvbnNcIiBjbGFzcz1cInVwbG9hZC1maWxlLWRlc2NyaXB0aW9uIGQtZmxleCBmbGV4LWFpLWNlbnRlciBmbGV4LWRjXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi04IHNiLWNvbG9yLWdyYXktNDAwXCI+XG4gICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uZHJhZ0FuZERyb3BDU1Z9fTxiciAvPlxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cIm1iLTggc2ItY29sb3ItZ3JheS00MDAgbXQtMTBcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uT3J9fTwvaDY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidXBsb2FkLWlucHV0LWJ1dHRvbiBzYi1idG4gc2ItYnRuLXN1Y2Nlc3Mgc2ItYnRuLW5vcm1hbFwiXG4gICAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdzZWxlY3RfY3N2X3VwZGF0ZScsJ2NsaWNrJyxjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnNlbGVjdEZpbGVUb1VwbG9hZCxcbiAgICAgICAgICAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCB7a2V5OiAnaWRlbnRpZmllcicsIHZhbHVlOiBjb2xsZWN0aW9uSWR9KVwiXG4gICAgICAgICAgICA+PGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uIHVwbG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnNlbGVjdEZpbGVUb1VwbG9hZH19ICBcbiAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwidXBsb2FkQ1NWKCRldmVudClcIiBhY2NlcHQ9XCIuY3N2XCIgdHlwZT1cImZpbGVcIiA+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic2ItY29sb3ItZ3JheS0yMDAgZnMtMC03ODVcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8udXBsb2FkRW50cmllc319PC9wPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYi1jb2xvci1wcmltYXJ5ICBmcy0wLTc4NVwiICpuZ0lmPVwiZmlsZU5hbWVcIj57e2ZpbGVOYW1lfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXBkYXRlQ1NWRmlsZVwiIGNsYXNzPVwicHktMjBcIj48aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24gaW5mbyBjaXJjbGUgcHItMTAgc2ItY29sb3ItZ3JheS0yMDBcIj48L2k+IFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYi1jb2xvci1ncmF5LTIwMCBmcy0wLTc4NVwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5jc3ZEb3dubG9hZEluc3RydWN0aW9ufX08L3NwYW4+PC9kaXY+XG4gICAgICAgIDwhLS0gVmFsaWRhdGlvbiBtZXNzYWdlICAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzYi1taW4taC0yNTAgZmxleC1haS1jZW50ZXIgbW4tMTUgc2ItYmctY29sb3ItcHJpbWFyeS0wXCIgKm5nSWY9XCJzaG93Q3N2VmFsaWRhdGlvblN0YXR1c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi4uLy4uL2Fzc2V0cy9pbWFnZXMvYnVsa3VwbG9hZGZpbGUucG5nXCIgYWx0PVwiXCIgY2xhc3M9XCJ3LTMwXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvcy1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYi1sb2FkZXIgc2Itc3VjY2Vzcy1sb2FkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtYi0xMFwiPlxuICAgICAgICAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnBsZWFzZVdhaXR9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiLWNvbG9yLWdyYXktNDAwIFwiPiB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8udmFsaWRhdGVDc3ZGaWxlfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBWYWxpZGF0aW9uIGZhaWxlZCBtZXNzYWdlID0gNCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzYi1taW4taC0yNTAgZmxleC1haS1jZW50ZXJcIiAqbmdJZj1cImVycm9yQ3N2U3RhdHVzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctNTAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vLi4vYXNzZXRzL2ltYWdlcy9idWxrdXBsb2FkZmlsZS5wbmdcIiBhbHQ9XCJcIiBjbGFzcz1cInctMzBcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctNTBcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIHByLTUgc2ItY29sb3ItZXJyb3IgcHItMTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5oaWVyYXJjaHlWYWxpZGF0aW9uRXJyb3J9fVxuICAgICAgICAgPGRpdiBjbGFzcz1cInNiLWNvbG9yLWdyYXktMjAwIHB0LTIwIGZzLTAtNzg1XCI+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5mb2xsb3dpbmdFcnJvcnN9fTwvZGl2PlxuICAgICAgICAgIDx1bCBjbGFzcz1cIm10LTE1IHNiLWNpcmNsZS11bFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvckNzdk1lc3NhZ2VcIj57e2Vycm9yfX08L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInFxLXVwbG9hZC1idXR0b24tc2VsZWN0b3Igc2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXN1Y2Nlc3MgbXktMjBcIiBcbiAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnc2VsZWN0X2Nzdl9yZXVwbG9hZCcsJ2NsaWNrJyxjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnJlVXBsb2FkQ1NWLFxuICAgICAgICAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCB7a2V5OiAnaWRlbnRpZmllcicsIHZhbHVlOiBjb2xsZWN0aW9uSWR9KVwiXG4gICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUmV1cGxvYWQoKVwiPlxuICAgICAgICAgICAgPGRpdj48aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24gcmVmcmVzaFwiPjwvaT57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8ucmVVcGxvYWRDU1Z9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNiLWJnLWNvbG9yLXN1Y2Nlc3MtMCBwLTEwIHNiLW1pbi1oLTI1MCBtbi0xNVwiICpuZ0lmPVwic2hvd1N1Y2Nlc3NDc3ZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctNTAgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cIi4uLy4uL2Fzc2V0cy9pbWFnZXMvYnVsa3VwbG9hZGZpbGUucG5nXCIgYWx0PVwiXCIgY2xhc3M9XCJ3LTMwXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInctNTAgZmxleC1haS1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBjaGVjayBjaXJjbGUgb3V0bGluZSBzYi1jb2xvci1zdWNjZXNzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzQ3JlYXRlQ3N2XCIgY2xhc3M9XCJmcy0wLTkyXCI+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5oaWVyYXJjaHlBZGRlZH19IDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQ3JlYXRlQ3N2XCIgY2xhc3M9XCJmcy0wLTkyXCI+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5oaWVyYXJjaHlVcGRhdGVkfX0gPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzYi1tb2RhbC1hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgXCIgXG4gICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdjbG9zZV9wb3B1cCcsJ2NsaWNrJyxjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5jbG9zZV9idG5fbGFiZWwsXG4gICAgICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZCwge2tleTogJ2lkZW50aWZpZXInLCB2YWx1ZTogY29sbGVjdGlvbklkfSlcIlxuICAgICAgKGNsaWNrKT1cImNsb3NlSGllcmFyY2h5TW9kYWwobW9kYWwpXCJbZGlzYWJsZWRdPVwiIWlzQ2xvc2FibGVcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsnc2ItYnRuLXByaW1hcnknOiBpc0Nsb3NhYmxlLCAnc2ItYnRuLWRpc2FibGVkJzogIWlzQ2xvc2FibGV9XCIgPlxuICAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5jbG9zZV9idG5fbGFiZWx9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgXCJcbiAgICAgIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2Nzdl91cGxvYWQnLCdjbGljaycsY29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8ubmV4dF9idG5fbGFiZWwsXG4gICAgICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZCwge2tleTogJ2lkZW50aWZpZXInLCB2YWx1ZTogY29sbGVjdGlvbklkfSlcIlxuICAgICAgKGNsaWNrKT1cInZhbGlkYXRlQ1NWRmlsZSgpXCJbZGlzYWJsZWRdPVwiIWlzVXBsb2FkQ3N2RW5hYmxlXCIgXG4gICAgICBbbmdDbGFzc109XCJ7J3NiLWJ0bi1wcmltYXJ5JzogaXNVcGxvYWRDc3ZFbmFibGUsICdzYi1idG4tZGlzYWJsZWQnOiAhaXNVcGxvYWRDc3ZFbmFibGV9XCIgPlxuICAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5uZXh0X2J0bl9sYWJlbH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvc3VpLW1vZGFsPiJdfQ==
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
3
|
+
import * as _ from 'lodash-es';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services/telemetry/telemetry.service";
|
|
6
|
+
import * as i2 from "../../services/tree/tree.service";
|
|
7
|
+
import * as i3 from "../../services/dialcode/dialcode.service";
|
|
8
|
+
import * as i4 from "../../services/toaster/toaster.service";
|
|
9
|
+
import * as i5 from "@angular/common/http";
|
|
10
|
+
import * as i6 from "../../services/config/config.service";
|
|
11
|
+
import * as i7 from "../../services/editor/editor.service";
|
|
12
|
+
import * as i8 from "@angular/common";
|
|
13
|
+
import * as i9 from "@angular/forms";
|
|
14
|
+
import * as i10 from "@project-sunbird/ng2-semantic-ui";
|
|
15
|
+
import * as i11 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
16
|
+
export class DialcodeComponent {
|
|
17
|
+
constructor(telemetryService, treeService, dialcodeService, toasterService, httpClient, configService, editorService) {
|
|
18
|
+
this.telemetryService = telemetryService;
|
|
19
|
+
this.treeService = treeService;
|
|
20
|
+
this.dialcodeService = dialcodeService;
|
|
21
|
+
this.toasterService = toasterService;
|
|
22
|
+
this.httpClient = httpClient;
|
|
23
|
+
this.configService = configService;
|
|
24
|
+
this.editorService = editorService;
|
|
25
|
+
this.minQRCode = 2;
|
|
26
|
+
this.maxQRCode = 250;
|
|
27
|
+
this.qrCodeCount = {
|
|
28
|
+
request: 0,
|
|
29
|
+
reserve: 0
|
|
30
|
+
};
|
|
31
|
+
this.disableQRDownloadBtn = false;
|
|
32
|
+
this.disableQRGenerateBtn = true;
|
|
33
|
+
this.isGeneratingQRCodes = false;
|
|
34
|
+
this.showQRCodePopup = false;
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.setQRCodeCriteria();
|
|
38
|
+
this.treeStatusListener();
|
|
39
|
+
}
|
|
40
|
+
setQRCodeCriteria() {
|
|
41
|
+
if (_.has(this.treeService.config, 'dialcodeMinLength')) {
|
|
42
|
+
this.minQRCode = _.get(this.treeService.config, 'dialcodeMinLength');
|
|
43
|
+
}
|
|
44
|
+
if (_.has(this.treeService.config, 'dialcodeMaxLength')) {
|
|
45
|
+
this.maxQRCode = _.get(this.treeService.config, 'dialcodeMaxLength');
|
|
46
|
+
}
|
|
47
|
+
this.dialcodeControl = new FormControl('', [Validators.required, Validators.max(this.maxQRCode), this.customDialcodeValidator()]);
|
|
48
|
+
}
|
|
49
|
+
treeStatusListener() {
|
|
50
|
+
this.treeService.treeStatus$.subscribe((status) => {
|
|
51
|
+
if (status === 'loaded') {
|
|
52
|
+
this.resolveQRDownloadBtn();
|
|
53
|
+
this.doQRCodeCount();
|
|
54
|
+
this.contentId = _.get(this.contentMetadata, 'identifier');
|
|
55
|
+
}
|
|
56
|
+
else if (status === 'saved') {
|
|
57
|
+
this.doQRCodeCount();
|
|
58
|
+
this.disableQRGenerateBtn = true;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.disableQRGenerateBtn = false;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
resolveQRDownloadBtn() {
|
|
66
|
+
this.disableQRDownloadBtn = _.has(this.contentMetadata, 'qrCodeProcessId') ? true : false;
|
|
67
|
+
}
|
|
68
|
+
doQRCodeCount() {
|
|
69
|
+
this.qrCodeCount.request = 0;
|
|
70
|
+
const rootNode = this.treeService.getTreeObject();
|
|
71
|
+
this.qrCodeCount.reserve = (this.contentMetadata.reservedDialcodes) ? _.size(this.contentMetadata.reservedDialcodes) : 0;
|
|
72
|
+
rootNode.visit((node) => {
|
|
73
|
+
if (node.data.metadata.dialcodeRequired === 'Yes') {
|
|
74
|
+
this.qrCodeCount.request += 1;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
openRequestPopup() {
|
|
79
|
+
if (this.qrCodeCount.request > 0) {
|
|
80
|
+
this.reserveDialCode(this.qrCodeCount.request + 1);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const requestNumber = this.qrCodeCount.reserve > 0 ? this.qrCodeCount.reserve : '';
|
|
84
|
+
this.dialcodeControl.setValue(requestNumber);
|
|
85
|
+
this.showQRCodePopup = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
submitDialcodeForm() {
|
|
89
|
+
this.showQRCodePopup = false;
|
|
90
|
+
this.reserveDialCode(this.dialcodeControl.value);
|
|
91
|
+
}
|
|
92
|
+
reserveDialCode(requestCount) {
|
|
93
|
+
this.isGeneratingQRCodes = true;
|
|
94
|
+
this.qrCodeCount.request = _.cloneDeep(requestCount);
|
|
95
|
+
this.dialcodeService.reserveDialCode(this.contentId, requestCount).subscribe((res) => {
|
|
96
|
+
const rootNodeMetdata = this.contentMetadata;
|
|
97
|
+
rootNodeMetdata.reservedDialcodes = res.result.reservedDialcodes;
|
|
98
|
+
rootNodeMetdata.qrCodeProcessId = res.result.processId;
|
|
99
|
+
this.qrCodeProcessId = res.result.processId;
|
|
100
|
+
this.isGeneratingQRCodes = false;
|
|
101
|
+
this.doQRCodeCount();
|
|
102
|
+
this.resolveQRDownloadBtn();
|
|
103
|
+
this.toasterService.success(_.get(this.configService, 'labelConfig.messages.success.010'));
|
|
104
|
+
}, (err) => {
|
|
105
|
+
this.isGeneratingQRCodes = false;
|
|
106
|
+
const errResponse = (err.error.result) ? err.error.result : undefined;
|
|
107
|
+
if (!_.isEmpty(errResponse) && errResponse.hasOwnProperty('count')) {
|
|
108
|
+
if (errResponse.count >= this.qrCodeCount.request) {
|
|
109
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.013'));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.toasterService.error(err.error.params.errmsg);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
downloadQRCodes() {
|
|
118
|
+
this.qrCodeProcessId = _.get(this.contentMetadata, 'qrCodeProcessId');
|
|
119
|
+
this.dialcodeService.downloadQRCode(this.qrCodeProcessId).subscribe((res) => {
|
|
120
|
+
const response = res.result;
|
|
121
|
+
if (response && response.hasOwnProperty('status')) {
|
|
122
|
+
if (response.status === 'in-process') {
|
|
123
|
+
this.toasterService.info(_.get(this.configService, 'labelConfig.messages.info.001'));
|
|
124
|
+
}
|
|
125
|
+
else if (response.status === 'completed') {
|
|
126
|
+
const filepath = response.url;
|
|
127
|
+
const pattern = new RegExp('([0-9])+(?=.[.zip])');
|
|
128
|
+
const timeStamp = filepath.match(pattern);
|
|
129
|
+
const contentName = _.get(this.contentMetadata, 'name');
|
|
130
|
+
const categoryName = (contentName.split(' ')).join('_').toLowerCase();
|
|
131
|
+
const filename = `${this.contentId}_${categoryName}_${timeStamp[0]}.zip`;
|
|
132
|
+
this.downloadFile(filepath, filename);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}, (err) => {
|
|
136
|
+
this.toasterService.error(err.error.params.errmsg);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
get contentMetadata() {
|
|
140
|
+
const rootNode = this.treeService.getFirstChild();
|
|
141
|
+
return _.get(rootNode, 'data.metadata');
|
|
142
|
+
}
|
|
143
|
+
downloadFile(url, filename) {
|
|
144
|
+
const config = {
|
|
145
|
+
blobUrl: url,
|
|
146
|
+
successMessage: _.get(this.configService, 'labelConfig.messages.success.011'),
|
|
147
|
+
fileType: 'zip',
|
|
148
|
+
fileName: filename
|
|
149
|
+
};
|
|
150
|
+
this.editorService.downloadBlobUrlFile(config);
|
|
151
|
+
}
|
|
152
|
+
keyPressNumbers(event) {
|
|
153
|
+
const pattern = /^([0-9])$/;
|
|
154
|
+
if (!pattern.test(event.key)) {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
customDialcodeValidator() {
|
|
161
|
+
return (control) => {
|
|
162
|
+
if (control.value === null || control.value === '') {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const inputValue = +control.value;
|
|
166
|
+
if (this.qrCodeCount.reserve === 0 && inputValue < this.minQRCode) {
|
|
167
|
+
return { minErr: _.replace(_.get(this.configService, 'labelConfig.messages.error.014'), '{number}', this.minQRCode) };
|
|
168
|
+
}
|
|
169
|
+
if (this.qrCodeCount.reserve > 0 && inputValue <= this.qrCodeCount.reserve) {
|
|
170
|
+
return { gteErr: _.replace(_.get(this.configService, 'labelConfig.messages.error.015'), '{number}', this.qrCodeCount.reserve) };
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialcodeComponent, deps: [{ token: i1.EditorTelemetryService }, { token: i2.TreeService }, { token: i3.DialcodeService }, { token: i4.ToasterService }, { token: i5.HttpClient }, { token: i6.ConfigService }, { token: i7.EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialcodeComponent, selector: "lib-dialcode", ngImport: i0, template: "<a class=\"fs-0-785 sb-color-primary font-weight-bold\"><i class=\"icon qrcode\"></i>QR Code </a>\n<a class=\"profile-avtar computer only p-0 pr-10\" tabindex=\"0\">\n <div suiDropdown class=\"ui dropdown right top pointing\" id=\"dropdown-menu-list-header\">\n <i class=\"icon caret down\"></i>\n <div class=\"menu\" suiDropdownMenu>\n <a class=\"item fs-0-785\"\n [ngClass]=\"(!disableQRGenerateBtn || (qrCodeCount.request > 0 && qrCodeCount.request + 1 <= qrCodeCount.reserve) || isGeneratingQRCodes ) ? 'sb-disabled' : ' '\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('generate_qr_codes','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon qrcode\"></i>\n <span *ngIf=\"!isGeneratingQRCodes\" class=\"text\" (click)=\"openRequestPopup();\">\n Generate {{(qrCodeCount.request > 0 && qrCodeCount.request+1 > qrCodeCount.reserve)? qrCodeCount.request + ' +\n 1' : (qrCodeCount.reserve > 0) ? qrCodeCount.reserve-1 +' + 1' : '' }} QR Codes\n </span>\n <span *ngIf=\"isGeneratingQRCodes\" class=\"text\">Generating {{(qrCodeCount.request > 0 )? qrCodeCount.request-1 + ' +\n 1' :'' }} QR codes</span> \n </a>\n <div class=\"ui divider\"></div>\n <a class=\"item fs-0-785\" (click)=\"downloadQRCodes();\" [ngClass]=\"!disableQRDownloadBtn ? 'sb-disabled' : ''\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('download_qr_codes','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon download\"></i> \n Download {{(qrCodeCount.reserve > 1) ? qrCodeCount.reserve-1 + ' +1' : ''}} QR codes\n </a>\n </div>\n </div>\n</a>\n<div class=\"seperator pr-20\"></div>\n\n<sui-modal *ngIf=\"showQRCodePopup\" [mustScroll]=\"true\" [isClosable]=\"true\" [transitionDuration]=\"0\" [size]=\"'small'\"\n class=\"sb-modal bx-none overflow-modal dialcodeModal\" appBodyScroll (dismissed)=\"showQRCodePopup = !showQRCodePopup\" #modal>\n <div class=\"sb-modal-header\">\n {{configService.labelConfig?.lbl?.requestForQrCode}}\n </div>\n <div class=\"sb-modal-content\">\n <div class=\"d-flex flex-jc-space-between p-20\">\n <div class=\"sb-field-group w-70\">\n <div class=\"sb-field\">\n <input type=\"number\" (keypress)=\"keyPressNumbers($event)\" pattern=\"[0-9]*\" inputmode=\"numeric\" [formControl]=\"dialcodeControl\" \n [ngClass]=\"dialcodeControl.errors ? 'sb-color-error' : '' \" class=\"sb-form-control p-5 w-100\" placeholder=\"e.g. 45\">\n <div *ngIf=\"dialcodeControl.invalid\">\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.max\">\n {{configService.labelConfig?.lbl?.numberToolarge}}\n </small>\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.minErr\">\n {{dialcodeControl.errors.minErr}}\n </small>\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.gteErr\">\n {{dialcodeControl.errors.gteErr}}\n </small>\n </div>\n </div>\n </div>\n \n <button class=\"sb-btn sb-btn-normal sb-btn-primary\" [ngClass]=\"dialcodeControl.valid ? '': 'sb-btn-request-disabled'\" \n [disabled]=\"!dialcodeControl.valid\" (click)=\"submitDialcodeForm();\" >{{configService.labelConfig?.button_labels?.request_btn_label}}</button>\n </div>\n </div>\n</sui-modal>", styles: [".seperator{border-left:solid 1px #ccc;height:20px}.profile-avtar .dropdown .menu{z-index:99999}.sb-btn-request-disabled{background-color:var(--white);color:#999!important;border:1px solid #cccccc;cursor:default;font-weight:400}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.SuiDropdown, selector: "[suiDropdown]", inputs: ["isOpen", "isDisabled", "tabindex", "autoClose"], outputs: ["isOpenChange"] }, { kind: "directive", type: i10.SuiDropdownMenu, selector: "[suiDropdownMenu]", inputs: ["menuTransition", "menuTransitionDuration", "menuAutoSelectFirst", "menuSelectedItemClass"] }, { kind: "directive", type: i10.SuiDropdownMenuItem, selector: ".item" }, { kind: "component", type: i10.SuiModal, selector: "sui-modal", inputs: ["isClosable", "closeResult", "size", "isCentered", "isFullScreen", "isBasic", "mustScroll", "isInverted", "transition", "transitionDuration"], outputs: ["approved", "denied", "dismissed"] }, { kind: "directive", type: i11.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }] }); }
|
|
177
|
+
}
|
|
178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialcodeComponent, decorators: [{
|
|
179
|
+
type: Component,
|
|
180
|
+
args: [{ selector: 'lib-dialcode', template: "<a class=\"fs-0-785 sb-color-primary font-weight-bold\"><i class=\"icon qrcode\"></i>QR Code </a>\n<a class=\"profile-avtar computer only p-0 pr-10\" tabindex=\"0\">\n <div suiDropdown class=\"ui dropdown right top pointing\" id=\"dropdown-menu-list-header\">\n <i class=\"icon caret down\"></i>\n <div class=\"menu\" suiDropdownMenu>\n <a class=\"item fs-0-785\"\n [ngClass]=\"(!disableQRGenerateBtn || (qrCodeCount.request > 0 && qrCodeCount.request + 1 <= qrCodeCount.reserve) || isGeneratingQRCodes ) ? 'sb-disabled' : ' '\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('generate_qr_codes','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon qrcode\"></i>\n <span *ngIf=\"!isGeneratingQRCodes\" class=\"text\" (click)=\"openRequestPopup();\">\n Generate {{(qrCodeCount.request > 0 && qrCodeCount.request+1 > qrCodeCount.reserve)? qrCodeCount.request + ' +\n 1' : (qrCodeCount.reserve > 0) ? qrCodeCount.reserve-1 +' + 1' : '' }} QR Codes\n </span>\n <span *ngIf=\"isGeneratingQRCodes\" class=\"text\">Generating {{(qrCodeCount.request > 0 )? qrCodeCount.request-1 + ' +\n 1' :'' }} QR codes</span> \n </a>\n <div class=\"ui divider\"></div>\n <a class=\"item fs-0-785\" (click)=\"downloadQRCodes();\" [ngClass]=\"!disableQRDownloadBtn ? 'sb-disabled' : ''\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('download_qr_codes','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon download\"></i> \n Download {{(qrCodeCount.reserve > 1) ? qrCodeCount.reserve-1 + ' +1' : ''}} QR codes\n </a>\n </div>\n </div>\n</a>\n<div class=\"seperator pr-20\"></div>\n\n<sui-modal *ngIf=\"showQRCodePopup\" [mustScroll]=\"true\" [isClosable]=\"true\" [transitionDuration]=\"0\" [size]=\"'small'\"\n class=\"sb-modal bx-none overflow-modal dialcodeModal\" appBodyScroll (dismissed)=\"showQRCodePopup = !showQRCodePopup\" #modal>\n <div class=\"sb-modal-header\">\n {{configService.labelConfig?.lbl?.requestForQrCode}}\n </div>\n <div class=\"sb-modal-content\">\n <div class=\"d-flex flex-jc-space-between p-20\">\n <div class=\"sb-field-group w-70\">\n <div class=\"sb-field\">\n <input type=\"number\" (keypress)=\"keyPressNumbers($event)\" pattern=\"[0-9]*\" inputmode=\"numeric\" [formControl]=\"dialcodeControl\" \n [ngClass]=\"dialcodeControl.errors ? 'sb-color-error' : '' \" class=\"sb-form-control p-5 w-100\" placeholder=\"e.g. 45\">\n <div *ngIf=\"dialcodeControl.invalid\">\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.max\">\n {{configService.labelConfig?.lbl?.numberToolarge}}\n </small>\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.minErr\">\n {{dialcodeControl.errors.minErr}}\n </small>\n <small class=\"sb-color-error pt-10 d-block\" *ngIf=\"dialcodeControl.errors.gteErr\">\n {{dialcodeControl.errors.gteErr}}\n </small>\n </div>\n </div>\n </div>\n \n <button class=\"sb-btn sb-btn-normal sb-btn-primary\" [ngClass]=\"dialcodeControl.valid ? '': 'sb-btn-request-disabled'\" \n [disabled]=\"!dialcodeControl.valid\" (click)=\"submitDialcodeForm();\" >{{configService.labelConfig?.button_labels?.request_btn_label}}</button>\n </div>\n </div>\n</sui-modal>", styles: [".seperator{border-left:solid 1px #ccc;height:20px}.profile-avtar .dropdown .menu{z-index:99999}.sb-btn-request-disabled{background-color:var(--white);color:#999!important;border:1px solid #cccccc;cursor:default;font-weight:400}\n"] }]
|
|
181
|
+
}], ctorParameters: function () { return [{ type: i1.EditorTelemetryService }, { type: i2.TreeService }, { type: i3.DialcodeService }, { type: i4.ToasterService }, { type: i5.HttpClient }, { type: i6.ConfigService }, { type: i7.EditorService }]; } });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZGlhbGNvZGUvZGlhbGNvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZGlhbGNvZGUvZGlhbGNvZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQW1CLFdBQVcsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekcsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFjL0IsTUFBTSxPQUFPLGlCQUFpQjtJQWM1QixZQUFtQixnQkFBd0MsRUFBVSxXQUF3QixFQUN6RSxlQUFnQyxFQUFVLGNBQThCLEVBQ3hFLFVBQXNCLEVBQVMsYUFBNEIsRUFDM0QsYUFBNEI7UUFIN0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3pFLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN4RSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFoQnpDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLGdCQUFXLEdBQStCO1lBQy9DLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0sseUJBQW9CLEdBQUcsS0FBSyxDQUFD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QyxPQUFPLEtBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdDQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2FBQ3ZIO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdDQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUNqSTtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0FuS1UsaUJBQWlCO21HQUFqQixpQkFBaUIsb0RDaEI5QiwyM0hBMERZOzs0RkQxQ0MsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyZWUvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxjb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxjb2RlL2RpYWxjb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2FzdGVyL3RvYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3IvZWRpdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGlhbGNvZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbGNvZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFsY29kZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERpYWxjb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIG1pblFSQ29kZSA9IDI7XG4gIHB1YmxpYyBtYXhRUkNvZGUgPSAyNTA7XG4gIHB1YmxpYyBxckNvZGVDb3VudDogeyBba2V5OiBzdHJpbmddOiBudW1iZXI7IH0gPSB7XG4gICAgcmVxdWVzdDogMCxcbiAgICByZXNlcnZlOiAwXG4gIH07XG4gIHB1YmxpYyBkaXNhYmxlUVJEb3dubG9hZEJ0biA9IGZhbHNlO1xuICBwdWJsaWMgZGlzYWJsZVFSR2VuZXJhdGVCdG4gPSB0cnVlO1xuICBwdWJsaWMgaXNHZW5lcmF0aW5nUVJDb2RlcyA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd1FSQ29kZVBvcHVwID0gZmFsc2U7XG4gIHB1YmxpYyBxckNvZGVQcm9jZXNzSWQ6IHN0cmluZztcbiAgcHVibGljIGRpYWxjb2RlQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBjb250ZW50SWQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHVibGljIHRlbGVtZXRyeVNlcnZpY2U6IEVkaXRvclRlbGVtZXRyeVNlcnZpY2UsIHByaXZhdGUgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGRpYWxjb2RlU2VydmljZTogRGlhbGNvZGVTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldFFSQ29kZUNyaXRlcmlhKCk7XG4gICAgdGhpcy50cmVlU3RhdHVzTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHNldFFSQ29kZUNyaXRlcmlhKCkge1xuICAgIGlmIChfLmhhcyh0aGlzLnRyZWVTZXJ2aWNlLmNvbmZpZywgJ2RpYWxjb2RlTWluTGVuZ3RoJykpIHtcbiAgICAgIHRoaXMubWluUVJDb2RlID0gXy5nZXQodGhpcy50cmVlU2VydmljZS5jb25maWcsICdkaWFsY29kZU1pbkxlbmd0aCcpO1xuICAgIH1cbiAgICBpZiAoXy5oYXModGhpcy50cmVlU2VydmljZS5jb25maWcsICdkaWFsY29kZU1heExlbmd0aCcpKSB7XG4gICAgICB0aGlzLm1heFFSQ29kZSA9IF8uZ2V0KHRoaXMudHJlZVNlcnZpY2UuY29uZmlnLCAnZGlhbGNvZGVNYXhMZW5ndGgnKTtcbiAgICB9XG4gICAgdGhpcy5kaWFsY29kZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCh0aGlzLm1heFFSQ29kZSksIHRoaXMuY3VzdG9tRGlhbGNvZGVWYWxpZGF0b3IoKV0pO1xuICB9XG5cbiAgdHJlZVN0YXR1c0xpc3RlbmVyKCkge1xuICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZVN0YXR1cyQuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVFSRG93bmxvYWRCdG4oKTtcbiAgICAgICAgdGhpcy5kb1FSQ29kZUNvdW50KCk7XG4gICAgICAgIHRoaXMuY29udGVudElkID0gXy5nZXQodGhpcy5jb250ZW50TWV0YWRhdGEsICdpZGVudGlmaWVyJyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3NhdmVkJykge1xuICAgICAgICB0aGlzLmRvUVJDb2RlQ291bnQoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVJHZW5lcmF0ZUJ0biA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVRUkdlbmVyYXRlQnRuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNvbHZlUVJEb3dubG9hZEJ0bigpIHtcbiAgICB0aGlzLmRpc2FibGVRUkRvd25sb2FkQnRuID0gXy5oYXModGhpcy5jb250ZW50TWV0YWRhdGEsICdxckNvZGVQcm9jZXNzSWQnKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGRvUVJDb2RlQ291bnQoKSB7XG4gICAgdGhpcy5xckNvZGVDb3VudC5yZXF1ZXN0ID0gMDtcbiAgICBjb25zdCByb290Tm9kZSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0VHJlZU9iamVjdCgpO1xuICAgIHRoaXMucXJDb2RlQ291bnQucmVzZXJ2ZSA9ICh0aGlzLmNvbnRlbnRNZXRhZGF0YS5yZXNlcnZlZERpYWxjb2RlcykgPyBfLnNpemUodGhpcy5jb250ZW50TWV0YWRhdGEucmVzZXJ2ZWREaWFsY29kZXMpIDogMDtcbiAgICByb290Tm9kZS52aXNpdCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZVJlcXVpcmVkID09PSAnWWVzJykge1xuICAgICAgICB0aGlzLnFyQ29kZUNvdW50LnJlcXVlc3QgKz0gMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5SZXF1ZXN0UG9wdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXJDb2RlQ291bnQucmVxdWVzdCA+IDApIHtcbiAgICAgIHRoaXMucmVzZXJ2ZURpYWxDb2RlKHRoaXMucXJDb2RlQ291bnQucmVxdWVzdCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXF1ZXN0TnVtYmVyID0gdGhpcy5xckNvZGVDb3VudC5yZXNlcnZlID4gMCA/IHRoaXMucXJDb2RlQ291bnQucmVzZXJ2ZSA6ICcnO1xuICAgICAgdGhpcy5kaWFsY29kZUNvbnRyb2wuc2V0VmFsdWUocmVxdWVzdE51bWJlcik7XG4gICAgICB0aGlzLnNob3dRUkNvZGVQb3B1cCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RGlhbGNvZGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1FSQ29kZVBvcHVwID0gZmFsc2U7XG4gICAgdGhpcy5yZXNlcnZlRGlhbENvZGUodGhpcy5kaWFsY29kZUNvbnRyb2wudmFsdWUpO1xuICB9XG5cbiAgcmVzZXJ2ZURpYWxDb2RlKHJlcXVlc3RDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0dlbmVyYXRpbmdRUkNvZGVzID0gdHJ1ZTtcbiAgICB0aGlzLnFyQ29kZUNvdW50LnJlcXVlc3QgPSBfLmNsb25lRGVlcChyZXF1ZXN0Q291bnQpO1xuICAgIHRoaXMuZGlhbGNvZGVTZXJ2aWNlLnJlc2VydmVEaWFsQ29kZSh0aGlzLmNvbnRlbnRJZCwgcmVxdWVzdENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgY29uc3Qgcm9vdE5vZGVNZXRkYXRhID0gdGhpcy5jb250ZW50TWV0YWRhdGE7XG4gICAgICByb290Tm9kZU1ldGRhdGEucmVzZXJ2ZWREaWFsY29kZXMgPSByZXMucmVzdWx0LnJlc2VydmVkRGlhbGNvZGVzO1xuICAgICAgcm9vdE5vZGVNZXRkYXRhLnFyQ29kZVByb2Nlc3NJZCA9IHJlcy5yZXN1bHQucHJvY2Vzc0lkO1xuICAgICAgdGhpcy5xckNvZGVQcm9jZXNzSWQgPSByZXMucmVzdWx0LnByb2Nlc3NJZDtcbiAgICAgIHRoaXMuaXNHZW5lcmF0aW5nUVJDb2RlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5kb1FSQ29kZUNvdW50KCk7XG4gICAgICB0aGlzLnJlc29sdmVRUkRvd25sb2FkQnRuKCk7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuc3VjY2Vzcy4wMTAnKSk7XG4gICAgfSwgKGVycikgPT4ge1xuICAgICAgdGhpcy5pc0dlbmVyYXRpbmdRUkNvZGVzID0gZmFsc2U7XG4gICAgICBjb25zdCBlcnJSZXNwb25zZSA9IChlcnIuZXJyb3IucmVzdWx0KSA/IGVyci5lcnJvci5yZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIV8uaXNFbXB0eShlcnJSZXNwb25zZSkgJiYgZXJyUmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ2NvdW50JykpIHtcbiAgICAgICAgaWYgKGVyclJlc3BvbnNlLmNvdW50ID49IHRoaXMucXJDb2RlQ291bnQucmVxdWVzdCkge1xuICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDEzJykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVyci5lcnJvci5wYXJhbXMuZXJybXNnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgZG93bmxvYWRRUkNvZGVzKCk6IHZvaWQge1xuICAgIHRoaXMucXJDb2RlUHJvY2Vzc0lkID0gXy5nZXQodGhpcy5jb250ZW50TWV0YWRhdGEsICdxckNvZGVQcm9jZXNzSWQnKTtcbiAgICB0aGlzLmRpYWxjb2RlU2VydmljZS5kb3dubG9hZFFSQ29kZSh0aGlzLnFyQ29kZVByb2Nlc3NJZCkuc3Vic2NyaWJlKChyZXMpID0+ICB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzLnJlc3VsdDtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdzdGF0dXMnKSkge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdpbi1wcm9jZXNzJykge1xuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5pbmZvKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmluZm8uMDAxJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZXBhdGggPSByZXNwb25zZS51cmw7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgnKFswLTldKSsoPz0uWy56aXBdKScpO1xuICAgICAgICAgICAgY29uc3QgdGltZVN0YW1wID0gZmlsZXBhdGgubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50TmFtZSA9IF8uZ2V0KHRoaXMuY29udGVudE1ldGFkYXRhLCAnbmFtZScpO1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlOYW1lID0gKGNvbnRlbnROYW1lLnNwbGl0KCcgJykpLmpvaW4oJ18nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHt0aGlzLmNvbnRlbnRJZH1fJHtjYXRlZ29yeU5hbWV9XyR7dGltZVN0YW1wWzBdfS56aXBgO1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZmlsZXBhdGgsIGZpbGVuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnIuZXJyb3IucGFyYW1zLmVycm1zZyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldCBjb250ZW50TWV0YWRhdGEoKSB7XG4gICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldEZpcnN0Q2hpbGQoKTtcbiAgICByZXR1cm4gXy5nZXQocm9vdE5vZGUsICdkYXRhLm1ldGFkYXRhJyk7XG4gIH1cblxuICBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIGJsb2JVcmw6IHVybCxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLnN1Y2Nlc3MuMDExJyksXG4gICAgICAgIGZpbGVUeXBlOiAnemlwJyxcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVuYW1lXG4gICAgfTtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZG93bmxvYWRCbG9iVXJsRmlsZShjb25maWcpO1xuICB9XG5cbiAga2V5UHJlc3NOdW1iZXJzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgcGF0dGVybiA9IC9eKFswLTldKSQvO1xuICAgIGlmICghcGF0dGVybi50ZXN0KGV2ZW50LmtleSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY3VzdG9tRGlhbGNvZGVWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gbnVsbCB8fCBjb250cm9sLnZhbHVlID09PSAnJykgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgY29uc3QgaW5wdXRWYWx1ZTogbnVtYmVyID0gK2NvbnRyb2wudmFsdWU7XG4gICAgICBpZiAodGhpcy5xckNvZGVDb3VudC5yZXNlcnZlID09PSAwICYmIGlucHV0VmFsdWUgPCB0aGlzLm1pblFSQ29kZSkge1xuICAgICAgICByZXR1cm4geyBtaW5FcnI6IF8ucmVwbGFjZShfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMTQnKSwgJ3tudW1iZXJ9JywgdGhpcy5taW5RUkNvZGUpIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xckNvZGVDb3VudC5yZXNlcnZlID4gMCAmJiBpbnB1dFZhbHVlIDw9IHRoaXMucXJDb2RlQ291bnQucmVzZXJ2ZSkge1xuICAgICAgICByZXR1cm4geyBndGVFcnI6IF8ucmVwbGFjZShfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMTUnKSwgJ3tudW1iZXJ9JywgdGhpcy5xckNvZGVDb3VudC5yZXNlcnZlKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxufVxuIiwiPGEgY2xhc3M9XCJmcy0wLTc4NSBzYi1jb2xvci1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIj48aSBjbGFzcz1cImljb24gcXJjb2RlXCI+PC9pPlFSIENvZGUgPC9hPlxuPGEgY2xhc3M9XCJwcm9maWxlLWF2dGFyIGNvbXB1dGVyIG9ubHkgcC0wIHByLTEwXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgPGRpdiBzdWlEcm9wZG93biBjbGFzcz1cInVpIGRyb3Bkb3duIHJpZ2h0IHRvcCBwb2ludGluZ1wiIGlkPVwiZHJvcGRvd24tbWVudS1saXN0LWhlYWRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb24gY2FyZXQgZG93blwiPjwvaT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnVcIiBzdWlEcm9wZG93bk1lbnU+XG4gICAgICAgICAgICA8YSBjbGFzcz1cIml0ZW0gZnMtMC03ODVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiKCFkaXNhYmxlUVJHZW5lcmF0ZUJ0biB8fCAocXJDb2RlQ291bnQucmVxdWVzdCA+IDAgJiYgcXJDb2RlQ291bnQucmVxdWVzdCArIDEgPD0gcXJDb2RlQ291bnQucmVzZXJ2ZSkgfHwgaXNHZW5lcmF0aW5nUVJDb2RlcyApID8gJ3NiLWRpc2FibGVkJyA6ICcgJ1wiXG4gICAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdnZW5lcmF0ZV9xcl9jb2RlcycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIHFyY29kZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0dlbmVyYXRpbmdRUkNvZGVzXCIgY2xhc3M9XCJ0ZXh0XCIgKGNsaWNrKT1cIm9wZW5SZXF1ZXN0UG9wdXAoKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUge3socXJDb2RlQ291bnQucmVxdWVzdCA+IDAgJiYgcXJDb2RlQ291bnQucmVxdWVzdCsxID4gcXJDb2RlQ291bnQucmVzZXJ2ZSk/IHFyQ29kZUNvdW50LnJlcXVlc3QgKyAnICtcbiAgICAgICAgICAgICAgICAgICAgMScgOiAocXJDb2RlQ291bnQucmVzZXJ2ZSA+IDApID8gcXJDb2RlQ291bnQucmVzZXJ2ZS0xICsnICsgMScgOiAnJyB9fSBRUiBDb2Rlc1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzR2VuZXJhdGluZ1FSQ29kZXNcIiBjbGFzcz1cInRleHRcIj5HZW5lcmF0aW5nIHt7KHFyQ29kZUNvdW50LnJlcXVlc3QgPiAwICk/IHFyQ29kZUNvdW50LnJlcXVlc3QtMSArICcgK1xuICAgICAgICAgICAgICAgICAgICAxJyA6JycgfX0gUVIgY29kZXM8L3NwYW4+IFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpIGRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiaXRlbSBmcy0wLTc4NVwiIChjbGljayk9XCJkb3dubG9hZFFSQ29kZXMoKTtcIiBbbmdDbGFzc109XCIhZGlzYWJsZVFSRG93bmxvYWRCdG4gPyAnc2ItZGlzYWJsZWQnIDogJydcIlxuICAgICAgICAgICAgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnZG93bmxvYWRfcXJfY29kZXMnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBkb3dubG9hZFwiPjwvaT4gXG4gICAgICAgICAgICAgICAgRG93bmxvYWQge3socXJDb2RlQ291bnQucmVzZXJ2ZSA+IDEpID8gcXJDb2RlQ291bnQucmVzZXJ2ZS0xICsgJyArMScgOiAnJ319IFFSIGNvZGVzXG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9hPlxuPGRpdiBjbGFzcz1cInNlcGVyYXRvciBwci0yMFwiPjwvZGl2PlxuXG48c3VpLW1vZGFsICpuZ0lmPVwic2hvd1FSQ29kZVBvcHVwXCIgW211c3RTY3JvbGxdPVwidHJ1ZVwiIFtpc0Nsb3NhYmxlXT1cInRydWVcIiBbdHJhbnNpdGlvbkR1cmF0aW9uXT1cIjBcIiBbc2l6ZV09XCInc21hbGwnXCJcbiAgICBjbGFzcz1cInNiLW1vZGFsIGJ4LW5vbmUgb3ZlcmZsb3ctbW9kYWwgZGlhbGNvZGVNb2RhbFwiIGFwcEJvZHlTY3JvbGwgKGRpc21pc3NlZCk9XCJzaG93UVJDb2RlUG9wdXAgPSAhc2hvd1FSQ29kZVBvcHVwXCIgI21vZGFsPlxuICAgIDxkaXYgY2xhc3M9XCJzYi1tb2RhbC1oZWFkZXJcIj5cbiAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnJlcXVlc3RGb3JRckNvZGV9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzYi1tb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1qYy1zcGFjZS1iZXR3ZWVuIHAtMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1maWVsZC1ncm91cCB3LTcwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGtleXByZXNzKT1cImtleVByZXNzTnVtYmVycygkZXZlbnQpXCIgcGF0dGVybj1cIlswLTldKlwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBbZm9ybUNvbnRyb2xdPVwiZGlhbGNvZGVDb250cm9sXCIgXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRpYWxjb2RlQ29udHJvbC5lcnJvcnMgPyAnc2ItY29sb3ItZXJyb3InIDogJycgXCIgY2xhc3M9XCJzYi1mb3JtLWNvbnRyb2wgcC01IHctMTAwXCIgcGxhY2Vob2xkZXI9XCJlLmcuIDQ1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkaWFsY29kZUNvbnRyb2wuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwic2ItY29sb3ItZXJyb3IgcHQtMTAgZC1ibG9ja1wiICpuZ0lmPVwiZGlhbGNvZGVDb250cm9sLmVycm9ycy5tYXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8ubnVtYmVyVG9vbGFyZ2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInNiLWNvbG9yLWVycm9yIHB0LTEwIGQtYmxvY2tcIiAqbmdJZj1cImRpYWxjb2RlQ29udHJvbC5lcnJvcnMubWluRXJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkaWFsY29kZUNvbnRyb2wuZXJyb3JzLm1pbkVycn19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwic2ItY29sb3ItZXJyb3IgcHQtMTAgZC1ibG9ja1wiICpuZ0lmPVwiZGlhbGNvZGVDb250cm9sLmVycm9ycy5ndGVFcnJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RpYWxjb2RlQ29udHJvbC5lcnJvcnMuZ3RlRXJyfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXByaW1hcnlcIiBbbmdDbGFzc109XCJkaWFsY29kZUNvbnRyb2wudmFsaWQgPyAnJzogJ3NiLWJ0bi1yZXF1ZXN0LWRpc2FibGVkJ1wiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkaWFsY29kZUNvbnRyb2wudmFsaWRcIiAoY2xpY2spPVwic3VibWl0RGlhbGNvZGVGb3JtKCk7XCIgPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8ucmVxdWVzdF9idG5fbGFiZWx9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc3VpLW1vZGFsPiJdfQ==
|