@colijnit/sharedcomponents 259.1.7 → 259.1.8
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/358.645812766f7a400d0d38.js +1 -0
- package/3rdpartylicenses.txt +2017 -0
- package/719.eae3283e9de629a67fcc.js +1 -0
- package/977.bd6291f9ee6f6ddf91f1.js +1 -0
- package/bundles/colijnit-sharedcomponents.umd.js +121 -54
- package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
- package/colijnit-sharedcomponents.metadata.json +1 -1
- package/esm2015/lib/components/custom-pdf/custom-pdf-dialog.component.js +112 -48
- package/favicon.ico +0 -0
- package/fesm2015/colijnit-sharedcomponents.js +111 -47
- package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
- package/index.html +12 -0
- package/lib/components/custom-pdf/custom-pdf-dialog.component.d.ts +3 -0
- package/main.987141ee790ebcd9f915.js +1 -0
- package/package.json +1 -1
- package/polyfills.907fe9d1887c5de17993.js +1 -0
- package/runtime.75ebd9b0a664565e2d37.js +1 -0
- package/styles.d0f69b6bddb7c4e48842.css +1 -0
|
@@ -18,22 +18,17 @@ export class CustomPdfDialogComponent {
|
|
|
18
18
|
this.additionalFileChangeEvent = new EventEmitter();
|
|
19
19
|
this.signaturePads = {};
|
|
20
20
|
this.signatureCanvases = {};
|
|
21
|
+
this.fileBody = '';
|
|
22
|
+
this.fileStyle = '';
|
|
21
23
|
this.showLoader = false;
|
|
24
|
+
// set to true if you want to skip email for debug purposes
|
|
25
|
+
this.enableLocalPreview = false;
|
|
22
26
|
}
|
|
23
27
|
showClass() {
|
|
24
28
|
return true;
|
|
25
29
|
}
|
|
26
30
|
ngOnInit() {
|
|
27
|
-
|
|
28
|
-
const head = document.getElementsByTagName('head')[0];
|
|
29
|
-
const styles = this.extractStyleParts(this.additionalFileContents);
|
|
30
|
-
this.fileStyle = styles[0];
|
|
31
|
-
const style = document.createElement('style');
|
|
32
|
-
style.appendChild(document.createTextNode(this.fileStyle));
|
|
33
|
-
head.appendChild(style);
|
|
34
|
-
const body = this.extractBodyContents(this.additionalFileContents);
|
|
35
|
-
this.fileBody = this._sanitizer.bypassSecurityTrustHtml(body[0]);
|
|
36
|
-
}
|
|
31
|
+
this._processAdditionalFileContents();
|
|
37
32
|
}
|
|
38
33
|
ngAfterViewInit() {
|
|
39
34
|
['signatureCanvas', 'signatureCanvas2'].forEach(id => {
|
|
@@ -75,75 +70,144 @@ export class CustomPdfDialogComponent {
|
|
|
75
70
|
}
|
|
76
71
|
});
|
|
77
72
|
}
|
|
73
|
+
_processAdditionalFileContents() {
|
|
74
|
+
var _a;
|
|
75
|
+
if (!this.additionalFileContents)
|
|
76
|
+
return;
|
|
77
|
+
const styles = this.extractStyleParts(this.additionalFileContents);
|
|
78
|
+
this.fileStyle = styles.join('\n').trim();
|
|
79
|
+
if (this.fileStyle) {
|
|
80
|
+
const head = document.getElementsByTagName('head')[0];
|
|
81
|
+
const styleEl = document.createElement('style');
|
|
82
|
+
styleEl.appendChild(document.createTextNode(this.fileStyle));
|
|
83
|
+
head.appendChild(styleEl);
|
|
84
|
+
}
|
|
85
|
+
const bodyParts = this.extractBodyContents(this.additionalFileContents);
|
|
86
|
+
const bodyHtml = ((_a = bodyParts[0]) !== null && _a !== void 0 ? _a : this.removeStyleAndScriptTags(this.additionalFileContents)).trim();
|
|
87
|
+
this.fileBody = this._sanitizer.bypassSecurityTrustHtml(bodyHtml);
|
|
88
|
+
}
|
|
78
89
|
extractStyleParts(html) {
|
|
90
|
+
var _a;
|
|
79
91
|
const stylePattern = /<style[^>]*>([\s\S]*?)<\/style>/gi;
|
|
80
92
|
const matches = [];
|
|
81
93
|
let match;
|
|
82
94
|
while ((match = stylePattern.exec(html)) !== null) {
|
|
83
|
-
matches.push(match[1].trim());
|
|
95
|
+
matches.push(((_a = match[1]) !== null && _a !== void 0 ? _a : '').trim());
|
|
84
96
|
}
|
|
85
97
|
return matches;
|
|
86
98
|
}
|
|
87
99
|
removeStyleAndScriptTags(html) {
|
|
88
100
|
const styleTagPattern = /<style[^>]*>[\s\S]*?<\/style>/gi;
|
|
89
101
|
const scriptTagPattern = /<script[^>]*>[\s\S]*?<\/script>/gi;
|
|
90
|
-
return html.replace(styleTagPattern, '').replace(scriptTagPattern, '');
|
|
102
|
+
return (html || '').replace(styleTagPattern, '').replace(scriptTagPattern, '');
|
|
91
103
|
}
|
|
92
104
|
extractBodyContents(html) {
|
|
105
|
+
var _a;
|
|
93
106
|
html = this.removeStyleAndScriptTags(html);
|
|
94
|
-
const
|
|
107
|
+
const bodyPattern = /<body[^>]*>([\s\S]*?)<\/body>/gi;
|
|
95
108
|
const matches = [];
|
|
96
109
|
let match;
|
|
97
|
-
while ((match =
|
|
98
|
-
matches.push(match[1].trim());
|
|
110
|
+
while ((match = bodyPattern.exec(html)) !== null) {
|
|
111
|
+
matches.push(((_a = match[1]) !== null && _a !== void 0 ? _a : '').trim());
|
|
99
112
|
}
|
|
100
113
|
return matches;
|
|
101
114
|
}
|
|
115
|
+
_isLocalhost() {
|
|
116
|
+
return ['localhost', '127.0.0.1', '::1'].includes(location.hostname);
|
|
117
|
+
}
|
|
102
118
|
handleSaveClicked() {
|
|
119
|
+
var _a, _b;
|
|
103
120
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
121
|
this.showLoader = true;
|
|
105
122
|
const clearButton = document.getElementById('clearButton');
|
|
106
|
-
clearButton
|
|
107
|
-
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
if (clearButton)
|
|
124
|
+
clearButton.hidden = true;
|
|
125
|
+
const doc = new jsPDF({ unit: 'mm', format: 'a4' });
|
|
126
|
+
let createdTemp = false;
|
|
127
|
+
let root = ((_a = this.pdfBody) === null || _a === void 0 ? void 0 : _a.nativeElement) ||
|
|
128
|
+
document.querySelector('#pdfBody');
|
|
129
|
+
if (!root) {
|
|
130
|
+
root = document.createElement('div');
|
|
131
|
+
root.id = 'pdfBody';
|
|
132
|
+
root.style.position = 'fixed';
|
|
133
|
+
root.style.left = '-99999px';
|
|
134
|
+
root.style.top = '0';
|
|
135
|
+
root.style.width = '794px';
|
|
136
|
+
root.style.pointerEvents = 'none';
|
|
137
|
+
document.body.appendChild(root);
|
|
138
|
+
createdTemp = true;
|
|
139
|
+
}
|
|
140
|
+
if (this.additionalFileContents && !root.hasChildNodes()) {
|
|
141
|
+
const html = String(this.additionalFileContents);
|
|
142
|
+
if (html.includes('<html')) {
|
|
143
|
+
const parsed = new DOMParser().parseFromString(html, 'text/html');
|
|
144
|
+
root.innerHTML = ((_b = parsed.body) === null || _b === void 0 ? void 0 : _b.innerHTML) || html;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
root.innerHTML = html;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const allSections = Array.from(root.querySelectorAll('section'));
|
|
151
|
+
const leafSections = allSections.filter(s => !s.querySelector('section'));
|
|
152
|
+
const nodesToRender = leafSections.length ? leafSections : (allSections.length ? allSections : [root]);
|
|
153
|
+
const pageWidth = doc.internal.pageSize.getWidth();
|
|
154
|
+
const pageHeight = doc.internal.pageSize.getHeight();
|
|
155
|
+
for (let i = 0; i < nodesToRender.length; i++) {
|
|
156
|
+
const el = nodesToRender[i];
|
|
113
157
|
try {
|
|
114
|
-
const dataUrl = yield toJpeg(
|
|
115
|
-
quality: 1,
|
|
116
|
-
backgroundColor: 'white'
|
|
117
|
-
});
|
|
118
|
-
const img = new Image();
|
|
119
|
-
img.src = dataUrl;
|
|
158
|
+
const dataUrl = yield toJpeg(el, { quality: 1, backgroundColor: 'white' });
|
|
120
159
|
yield new Promise((resolve) => {
|
|
160
|
+
const img = new Image();
|
|
121
161
|
img.onload = () => {
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
162
|
+
const w = img.width;
|
|
163
|
+
const h = img.height;
|
|
164
|
+
const scale = Math.min(pageWidth / w, pageHeight / h);
|
|
165
|
+
const renderW = w * scale;
|
|
166
|
+
const renderH = h * scale;
|
|
167
|
+
doc.addImage(dataUrl, 'JPG', 0, 0, renderW, renderH);
|
|
168
|
+
if (i < nodesToRender.length - 1)
|
|
126
169
|
doc.addPage();
|
|
127
|
-
}
|
|
128
170
|
resolve();
|
|
129
171
|
};
|
|
172
|
+
img.src = dataUrl;
|
|
130
173
|
});
|
|
131
174
|
}
|
|
132
|
-
catch (
|
|
133
|
-
console.error('Error generating image:',
|
|
175
|
+
catch (err) {
|
|
176
|
+
console.error('Error generating image:', err);
|
|
134
177
|
}
|
|
135
178
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
179
|
+
if (createdTemp && root && root.parentNode) {
|
|
180
|
+
root.parentNode.removeChild(root);
|
|
181
|
+
}
|
|
182
|
+
// enableLocalPreview can be enabled to see the output without sending email
|
|
183
|
+
if (this.enableLocalPreview && this._isLocalhost()) {
|
|
184
|
+
const blob = doc.output('blob');
|
|
185
|
+
const url = URL.createObjectURL(blob);
|
|
186
|
+
window.open(url, '_blank');
|
|
187
|
+
this.showLoader = false;
|
|
188
|
+
if (clearButton)
|
|
189
|
+
clearButton.hidden = false;
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const tempFile = doc.output('datauristring');
|
|
194
|
+
const file = this.dataURItoBlob(tempFile);
|
|
195
|
+
const fileAsCoDocument = yield FileUtils.ReadFileAsNewCoDocument(file);
|
|
196
|
+
fileAsCoDocument.fileType = FileUtils.IsImageFile(file) ? FileType.Image : FileType.Document;
|
|
197
|
+
fileAsCoDocument.creationDate = new Date();
|
|
198
|
+
fileAsCoDocument.modifiedDate = new Date();
|
|
199
|
+
fileAsCoDocument.reports = 1;
|
|
200
|
+
this.additionalFileChangeEvent.emit(fileAsCoDocument);
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
console.error('PDF packaging failed:', e);
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
this.showLoader = false;
|
|
207
|
+
this.closePDFDialog.emit();
|
|
208
|
+
if (clearButton)
|
|
209
|
+
clearButton.hidden = false;
|
|
210
|
+
}
|
|
147
211
|
});
|
|
148
212
|
}
|
|
149
213
|
dataURItoBlob(dataURI) {
|
|
@@ -181,7 +245,7 @@ CustomPdfDialogComponent.decorators = [
|
|
|
181
245
|
<div *ngIf="showLoader" class="loader-container">
|
|
182
246
|
<co-loader *ngIf="showLoader"></co-loader>
|
|
183
247
|
</div>
|
|
184
|
-
|
|
248
|
+
|
|
185
249
|
<div #pdfBody id="pdfBody">
|
|
186
250
|
<section [innerHTML]="fileBody"></section>
|
|
187
251
|
</div>
|
|
@@ -212,4 +276,4 @@ CustomPdfDialogComponent.propDecorators = {
|
|
|
212
276
|
closePDFDialog: [{ type: Output }],
|
|
213
277
|
additionalFileChangeEvent: [{ type: Output }]
|
|
214
278
|
};
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBkZi1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXBkZi9jdXN0b20tcGRmLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sWUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUVuRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDckUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBK0IxQyxNQUFNLE9BQU8sd0JBQXdCO0lBZ0NuQyxZQUNTLGdCQUFrQyxFQUNqQyxVQUF3QjtRQUR6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQWM7UUFqQ2xCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBY25DLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUdoQyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzVELDhCQUF5QixHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFD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QUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDdkQsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFNBQXVCLEVBQUUsZUFBMkI7UUFDakYsTUFBTSxpQkFBaUIsR0FBVyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEQsTUFBTSxLQUFLLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4RixlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUYsZUFBZSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRSxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsQ0FBQzs7O1lBek5GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCVDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBdENPLGdCQUFnQjtZQUNoQixZQUFZOzs7d0JBeUNqQixXQUFXLFNBQUMsNEJBQTRCO3NCQUt4QyxTQUFTLFNBQUMsU0FBUztxQ0FHbkIsS0FBSztpQ0FHTCxLQUFLOzZCQUdMLE1BQU07d0NBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2pzUERGfSBmcm9tICdqc3BkZic7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCBTaWduYXR1cmVQYWQgZnJvbSAnc2lnbmF0dXJlX3BhZCc7XHJcbmltcG9ydCB7dG9KcGVnfSBmcm9tICdodG1sLXRvLWltYWdlJztcclxuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudC5ibyc7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC91dGlscy9maWxlLXV0aWxzJztcclxuXHJcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vZmlsZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0ljb259IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY28tY3VzdG9tLXBkZi1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8Y28tZGlhbG9nXHJcbiAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgIGlkPVwiY3VzdG9tLXBkZi1kaWFsb2dcIlxyXG4gICAgICAoY2xvc2VDbGljayk9XCJjbG9zZVBERkRpYWxvZy5lbWl0KClcIj5cclxuICAgICAgPCEtLSBjcmVhdGUgYSBuaWNlIGNvbnRhaW5lciBmb3IgbG9hZGVyIHNvIGl0IGlzIG5vdCByYW5kb20gaW4gdGhlIGNvcm5lciBzb21ld2hlcmUgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93TG9hZGVyXCIgY2xhc3M9XCJsb2FkZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGNvLWxvYWRlciAqbmdJZj1cInNob3dMb2FkZXJcIj48L2NvLWxvYWRlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2ICNwZGZCb2R5IGlkPVwicGRmQm9keVwiPlxyXG4gICAgICAgIDxzZWN0aW9uIFtpbm5lckhUTUxdPVwiZmlsZUJvZHlcIj48L3NlY3Rpb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjby1kaWFsb2ctZm9vdGVyLWJ1dHRvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkNoZWNrRHVvdG9uZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZUNsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQ3Jvc3NTa2lubnkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlUERGRGlhbG9nLmVtaXQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9jby1kaWFsb2c+XHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21QZGZEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uczogdHlwZW9mIEljb24gPSBJY29uO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWN1c3RvbS1wZGYtZGlhbG9nJylcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdwZGZCb2R5JylcclxuICBwdWJsaWMgcGRmQm9keTogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWRkaXRpb25hbEZpbGVDb250ZW50czogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhZGRpdGlvbmFsRmlsZU5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgY2xvc2VQREZEaWFsb2c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBhZGRpdGlvbmFsRmlsZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+KCk7XHJcblxyXG4gIHB1YmxpYyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gIHB1YmxpYyBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgcHVibGljIHNpZ25hdHVyZVBhZHM6IHsgW2tleTogc3RyaW5nXTogU2lnbmF0dXJlUGFkIH0gPSB7fTtcclxuICBwdWJsaWMgc2lnbmF0dXJlQ2FudmFzZXM6IHsgW2tleTogc3RyaW5nXTogRWxlbWVudFJlZiB9ID0ge307XHJcbiAgcHVibGljIGZpbGVCb2R5OiBhbnk7XHJcbiAgcHVibGljIGZpbGVTdHlsZTogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWRkaXRpb25hbEZpbGVDb250ZW50cykge1xyXG4gICAgICBjb25zdCBoZWFkOiBIVE1MSGVhZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xyXG4gICAgICBjb25zdCBzdHlsZXM6IHN0cmluZ1tdID0gdGhpcy5leHRyYWN0U3R5bGVQYXJ0cyh0aGlzLmFkZGl0aW9uYWxGaWxlQ29udGVudHMpO1xyXG4gICAgICB0aGlzLmZpbGVTdHlsZSA9IHN0eWxlc1swXTtcclxuICAgICAgY29uc3Qgc3R5bGU6IEhUTUxTdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmZpbGVTdHlsZSkpO1xyXG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcclxuICAgICAgY29uc3QgYm9keTogc3RyaW5nW10gPSB0aGlzLmV4dHJhY3RCb2R5Q29udGVudHModGhpcy5hZGRpdGlvbmFsRmlsZUNvbnRlbnRzKTtcclxuICAgICAgdGhpcy5maWxlQm9keSA9IHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChib2R5WzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIFsnc2lnbmF0dXJlQ2FudmFzJywgJ3NpZ25hdHVyZUNhbnZhczInXS5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgY29uc3QgY2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgICAgaWYgKGNhbnZhc0VsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjYW52YXNSZWYgPSBuZXcgRWxlbWVudFJlZihjYW52YXNFbGVtZW50KTtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmVQYWQgPSBuZXcgU2lnbmF0dXJlUGFkKDxIVE1MQ2FudmFzRWxlbWVudD5jYW52YXNSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5zaWduYXR1cmVDYW52YXNlc1tpZF0gPSBjYW52YXNSZWY7XHJcbiAgICAgICAgdGhpcy5zaWduYXR1cmVQYWRzW2lkXSA9IHNpZ25hdHVyZVBhZDtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9yZXNpemVTaWduYXR1cmVDYW52YXMoc2lnbmF0dXJlUGFkLCBjYW52YXNSZWYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNsZWFyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsZWFyQnV0dG9uJyk7XHJcbiAgICBjbGVhckJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmhhbmRsZUNsZWFyKCkpO1xyXG5cclxuICAgIC8vIER1ZSB0byBhIGJ1ZyBvciBrbm93biBpc3N1ZSB3aXRoIGh0bWwtdG8taW1hZ2Ugd2UgbmVlZCBhIGJpdCBvZiBKUyB0aGUgZmlsbCBpbiB0aGUgY2hlY2tlZCB2YWx1ZSB3aGVuIHNlbGVjdGluZyBhIGNoZWNrYm94LlxyXG4gICAgLy8gSGFuZGxpbmcgdGhlIGNoZWNrYm94ZXMgYW5kIHJhZGlvYnV0dG9uc1xyXG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9IHRoaXMucGRmQm9keS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xyXG4gICAgICAgICAgY2hlY2tib3guc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJ3RydWUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2hlY2tib3gucmVtb3ZlQXR0cmlidXRlKCdjaGVja2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmICh0YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZSA9PT0gJ3JhZGlvJykge1xyXG4gICAgICAgIGNvbnN0IHJhZGlvOiBIVE1MSW5wdXRFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBOYW1lOiBzdHJpbmcgPSByYWRpby5uYW1lO1xyXG4gICAgICAgIGNvbnN0IHJhZGlvczogTm9kZUxpc3RPZjxFbGVtZW50PiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGBpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIiR7Z3JvdXBOYW1lfVwiXWApO1xyXG4gICAgICAgIHJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4gcmFkaW8ucmVtb3ZlQXR0cmlidXRlKCdjaGVja2VkJykpO1xyXG4gICAgICAgIGlmIChyYWRpby5jaGVja2VkKSB7XHJcbiAgICAgICAgICByYWRpby5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXh0cmFjdFN0eWxlUGFydHMoaHRtbDogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3Qgc3R5bGVQYXR0ZXJuOiBSZWdFeHAgPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IG1hdGNoZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVQYXR0ZXJuLmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XHJcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaFsxXS50cmltKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU3R5bGVBbmRTY3JpcHRUYWdzKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdHlsZVRhZ1BhdHRlcm46IFJlZ0V4cCA9IC88c3R5bGVbXj5dKj5bXFxzXFxTXSo/PFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IHNjcmlwdFRhZ1BhdHRlcm46IFJlZ0V4cCA9IC88c2NyaXB0W14+XSo+W1xcc1xcU10qPzxcXC9zY3JpcHQ+L2dpO1xyXG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZShzdHlsZVRhZ1BhdHRlcm4sICcnKS5yZXBsYWNlKHNjcmlwdFRhZ1BhdHRlcm4sICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHRyYWN0Qm9keUNvbnRlbnRzKGh0bWw6IHN0cmluZyk6IHN0cmluZyBbXSB7XHJcbiAgICBodG1sID0gdGhpcy5yZW1vdmVTdHlsZUFuZFNjcmlwdFRhZ3MoaHRtbCk7XHJcbiAgICBjb25zdCBzdHlsZVBhdHRlcm46IFJlZ0V4cCA9IC88Ym9keVtePl0qPihbXFxzXFxTXSo/KTxcXC9ib2R5Pi9naTtcclxuICAgIGNvbnN0IG1hdGNoZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVQYXR0ZXJuLmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XHJcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaFsxXS50cmltKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlU2F2ZUNsaWNrZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgY2xlYXJCdXR0b246IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsZWFyQnV0dG9uJyk7XHJcbiAgICBjbGVhckJ1dHRvbi5oaWRkZW4gPSB0cnVlO1xyXG4gICAgY29uc3QgZG9jOiBqc1BERiA9IG5ldyBqc1BERigpO1xyXG4gICAgY29uc3QgaHRtbERvY3VtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcGRmQm9keVwiKTtcclxuICAgIGNvbnN0IGRvY3VtZW50U2VjdGlvbjogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4gPSBodG1sRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlY3Rpb24nKTtcclxuICAgIGNvbnN0IHNlY3Rpb25zQ291bnQ6IG51bWJlciA9IGRvY3VtZW50U2VjdGlvbi5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHNlY3Rpb25zQ291bnQ7IGkrKykge1xyXG4gICAgICBjb25zdCBodG1sOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50U2VjdGlvbltpXTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkYXRhVXJsOiBzdHJpbmcgPSBhd2FpdCB0b0pwZWcoaHRtbCwge1xyXG4gICAgICAgICAgcXVhbGl0eTogMSxcclxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGltZzogSFRNTEltYWdlRWxlbWVudCA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGltZy5zcmMgPSBkYXRhVXJsO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbWdXaWR0aDogbnVtYmVyID0gMjE4O1xyXG4gICAgICAgICAgICBjb25zdCBpbWdIZWlnaHQ6IG51bWJlciA9IChpbWcuaGVpZ2h0ICogaW1nV2lkdGgpIC8gaW1nLndpZHRoO1xyXG4gICAgICAgICAgICBkb2MuYWRkSW1hZ2UoZGF0YVVybCwgJ0pQRycsIC00LCAwLCBpbWdXaWR0aCwgaW1nSGVpZ2h0KTtcclxuICAgICAgICAgICAgaWYgKGkgPCBzZWN0aW9uc0NvdW50IC0gMSkge1xyXG4gICAgICAgICAgICAgIGRvYy5hZGRQYWdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZW5lcmF0aW5nIGltYWdlOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgdGVtcEZpbGU6IHN0cmluZyA9IGRvYy5vdXRwdXQoJ2RhdGF1cmlzdHJpbmcnKTtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSB0aGlzLmRhdGFVUkl0b0Jsb2IodGVtcEZpbGUpO1xyXG4gICAgY29uc3QgZmlsZUFzQ29Eb2N1bWVudCA9IGF3YWl0IEZpbGVVdGlscy5SZWFkRmlsZUFzTmV3Q29Eb2N1bWVudChmaWxlKTtcclxuICAgIGZpbGVBc0NvRG9jdW1lbnQuZmlsZVR5cGUgPSBGaWxlVXRpbHMuSXNJbWFnZUZpbGUoZmlsZSkgPyBGaWxlVHlwZS5JbWFnZSA6IEZpbGVUeXBlLkRvY3VtZW50O1xyXG4gICAgZmlsZUFzQ29Eb2N1bWVudC5jcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZmlsZUFzQ29Eb2N1bWVudC5tb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZmlsZUFzQ29Eb2N1bWVudC5yZXBvcnRzID0gMTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEZpbGVDaGFuZ2VFdmVudC5lbWl0KGZpbGVBc0NvRG9jdW1lbnQpO1xyXG4gICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlUERGRGlhbG9nLmVtaXQoKTtcclxuICAgIGNsZWFyQnV0dG9uLmhpZGRlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSk6IEZpbGUge1xyXG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihkYXRhVVJJLnNwbGl0KCcsJylbMV0pO1xyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcclxuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEZpbGUoW2FiXSwgdGhpcy5hZGRpdGlvbmFsRmlsZU5hbWUgKyAnLnBkZicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNsZWFyKCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNpZ25hdHVyZVBhZHMpLmZvckVhY2goc2lnbmF0dXJlUGFkID0+IHtcclxuICAgICAgc2lnbmF0dXJlUGFkPy5jbGVhcigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNpemVTaWduYXR1cmVDYW52YXMoc2lnbmF0dXJlOiBTaWduYXR1cmVQYWQsIHNpZ25hdHVyZUNhbnZhczogRWxlbWVudFJlZik6IHZvaWQge1xyXG4gICAgY29uc3QgaW1hZ2VCZWZvcmVSZXNpemU6IHN0cmluZyA9IHNpZ25hdHVyZS50b0RhdGFVUkwoKTtcclxuICAgIGNvbnN0IHJhdGlvOiBudW1iZXIgPSBNYXRoLm1heCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLCAxKTtcclxuICAgIHNpZ25hdHVyZUNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2lnbmF0dXJlQ2FudmFzLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiByYXRpbztcclxuICAgIHNpZ25hdHVyZUNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpZ25hdHVyZUNhbnZhcy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAqIHJhdGlvO1xyXG4gICAgc2lnbmF0dXJlQ2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dChcIjJkXCIpLnNjYWxlKHJhdGlvLCByYXRpbyk7XHJcbiAgICBzaWduYXR1cmUuZnJvbURhdGFVUkwoaW1hZ2VCZWZvcmVSZXNpemUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXBkZi1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXBkZi9jdXN0b20tcGRmLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sWUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUVuRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDckUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBK0IxQyxNQUFNLE9BQU8sd0JBQXdCO0lBbUNuQyxZQUNTLGdCQUFrQyxFQUNqQyxVQUF3QjtRQUR6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQWM7UUFwQ2xCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBY25DLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUdoQyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzVELDhCQUF5QixHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFD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O1FBQ2pGLE1BQU0saUJBQWlCLEdBQVcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEYsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFGLGVBQWUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OztZQTdSRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQXRDTyxnQkFBZ0I7WUFDaEIsWUFBWTs7O3dCQXlDakIsV0FBVyxTQUFDLDRCQUE0QjtzQkFLeEMsU0FBUyxTQUFDLFNBQVM7cUNBR25CLEtBQUs7aUNBR0wsS0FBSzs2QkFHTCxNQUFNO3dDQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtqc1BERn0gZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgU2lnbmF0dXJlUGFkIGZyb20gJ3NpZ25hdHVyZV9wYWQnO1xyXG5pbXBvcnQge3RvSnBlZ30gZnJvbSAnaHRtbC10by1pbWFnZSc7XHJcbmltcG9ydCB7Q29Eb2N1bWVudH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9jdW1lbnQuYm8nO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvdXRpbHMvZmlsZS11dGlscyc7XHJcblxyXG5pbXBvcnQge0ZpbGVUeXBlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ZpbGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi8uLi9lbnVtL2ljb24uZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvLWN1c3RvbS1wZGYtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGNvLWRpYWxvZ1xyXG4gICAgICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxyXG4gICAgICBpZD1cImN1c3RvbS1wZGYtZGlhbG9nXCJcclxuICAgICAgKGNsb3NlQ2xpY2spPVwiY2xvc2VQREZEaWFsb2cuZW1pdCgpXCI+XHJcbiAgICAgIDwhLS0gY3JlYXRlIGEgbmljZSBjb250YWluZXIgZm9yIGxvYWRlciBzbyBpdCBpcyBub3QgcmFuZG9tIGluIHRoZSBjb3JuZXIgc29tZXdoZXJlIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvYWRlclwiIGNsYXNzPVwibG9hZGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxjby1sb2FkZXIgKm5nSWY9XCJzaG93TG9hZGVyXCI+PC9jby1sb2FkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAjcGRmQm9keSBpZD1cInBkZkJvZHlcIj5cclxuICAgICAgICA8c2VjdGlvbiBbaW5uZXJIVE1MXT1cImZpbGVCb2R5XCI+PC9zZWN0aW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLWZvb3Rlci1idXR0b24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5DaGVja0R1b3RvbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNhdmVDbGlja2VkKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJjbG9zZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkNyb3NzU2tpbm55KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVBERkRpYWxvZy5lbWl0KClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvY28tZGlhbG9nPlxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUGRmRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1jdXN0b20tcGRmLWRpYWxvZycpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncGRmQm9keScpXHJcbiAgcHVibGljIHBkZkJvZHk6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFkZGl0aW9uYWxGaWxlQ29udGVudHM6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWRkaXRpb25hbEZpbGVOYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNsb3NlUERGRGlhbG9nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgYWRkaXRpb25hbEZpbGVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50PigpO1xyXG5cclxuICBwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICBwdWJsaWMgY29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gIHB1YmxpYyBzaWduYXR1cmVQYWRzOiB7IFtrZXk6IHN0cmluZ106IFNpZ25hdHVyZVBhZCB9ID0ge307XHJcbiAgcHVibGljIHNpZ25hdHVyZUNhbnZhc2VzOiB7IFtrZXk6IHN0cmluZ106IEVsZW1lbnRSZWYgfSA9IHt9O1xyXG4gIHB1YmxpYyBmaWxlQm9keTogYW55ID0gJyc7XHJcbiAgcHVibGljIGZpbGVTdHlsZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHNraXAgZW1haWwgZm9yIGRlYnVnIHB1cnBvc2VzXHJcbiAgcHJpdmF0ZSBlbmFibGVMb2NhbFByZXZpZXcgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb2Nlc3NBZGRpdGlvbmFsRmlsZUNvbnRlbnRzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBbJ3NpZ25hdHVyZUNhbnZhcycsICdzaWduYXR1cmVDYW52YXMyJ10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzUmVmID0gbmV3IEVsZW1lbnRSZWYoY2FudmFzRWxlbWVudCk7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUGFkID0gbmV3IFNpZ25hdHVyZVBhZCg8SFRNTENhbnZhc0VsZW1lbnQ+Y2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuc2lnbmF0dXJlQ2FudmFzZXNbaWRdID0gY2FudmFzUmVmO1xyXG4gICAgICAgIHRoaXMuc2lnbmF0dXJlUGFkc1tpZF0gPSBzaWduYXR1cmVQYWQ7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplU2lnbmF0dXJlQ2FudmFzKHNpZ25hdHVyZVBhZCwgY2FudmFzUmVmKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjbGVhckJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGVhckJ1dHRvbicpO1xyXG4gICAgY2xlYXJCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5oYW5kbGVDbGVhcigpKTtcclxuXHJcbiAgICAvLyBEdWUgdG8gYSBidWcgb3Iga25vd24gaXNzdWUgd2l0aCBodG1sLXRvLWltYWdlIHdlIG5lZWQgYSBiaXQgb2YgSlMgdGhlIGZpbGwgaW4gdGhlIGNoZWNrZWQgdmFsdWUgd2hlbiBzZWxlY3RpbmcgYSBjaGVja2JveC5cclxuICAgIC8vIEhhbmRsaW5nIHRoZSBjaGVja2JveGVzIGFuZCByYWRpb2J1dHRvbnNcclxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLnBkZkJvZHkubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmICh0YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGNoZWNrYm94LmNoZWNrZWQpIHtcclxuICAgICAgICAgIGNoZWNrYm94LnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUF0dHJpYnV0ZSgnY2hlY2tlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICBjb25zdCByYWRpbzogSFRNTElucHV0RWxlbWVudCA9IHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZTogc3RyaW5nID0gcmFkaW8ubmFtZTtcclxuICAgICAgICBjb25zdCByYWRpb3M6IE5vZGVMaXN0T2Y8RWxlbWVudD4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCIke2dyb3VwTmFtZX1cIl1gKTtcclxuICAgICAgICByYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHJhZGlvLnJlbW92ZUF0dHJpYnV0ZSgnY2hlY2tlZCcpKTtcclxuICAgICAgICBpZiAocmFkaW8uY2hlY2tlZCkge1xyXG4gICAgICAgICAgcmFkaW8uc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJ3RydWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0FkZGl0aW9uYWxGaWxlQ29udGVudHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWRkaXRpb25hbEZpbGVDb250ZW50cykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuZXh0cmFjdFN0eWxlUGFydHModGhpcy5hZGRpdGlvbmFsRmlsZUNvbnRlbnRzKTtcclxuICAgIHRoaXMuZmlsZVN0eWxlID0gc3R5bGVzLmpvaW4oJ1xcbicpLnRyaW0oKTtcclxuICAgIGlmICh0aGlzLmZpbGVTdHlsZSkge1xyXG4gICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcclxuICAgICAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgIHN0eWxlRWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5maWxlU3R5bGUpKTtcclxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib2R5UGFydHMgPSB0aGlzLmV4dHJhY3RCb2R5Q29udGVudHModGhpcy5hZGRpdGlvbmFsRmlsZUNvbnRlbnRzKTtcclxuICAgIGNvbnN0IGJvZHlIdG1sID0gKGJvZHlQYXJ0c1swXSA/PyB0aGlzLnJlbW92ZVN0eWxlQW5kU2NyaXB0VGFncyh0aGlzLmFkZGl0aW9uYWxGaWxlQ29udGVudHMpKS50cmltKCk7XHJcbiAgICB0aGlzLmZpbGVCb2R5ID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGJvZHlIdG1sKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHRyYWN0U3R5bGVQYXJ0cyhodG1sOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzdHlsZVBhdHRlcm4gPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IG1hdGNoZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVQYXR0ZXJuLmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XHJcbiAgICAgIG1hdGNoZXMucHVzaCgobWF0Y2hbMV0gPz8gJycpLnRyaW0oKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF0Y2hlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVTdHlsZUFuZFNjcmlwdFRhZ3MoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0eWxlVGFnUGF0dGVybiA9IC88c3R5bGVbXj5dKj5bXFxzXFxTXSo/PFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IHNjcmlwdFRhZ1BhdHRlcm4gPSAvPHNjcmlwdFtePl0qPltcXHNcXFNdKj88XFwvc2NyaXB0Pi9naTtcclxuICAgIHJldHVybiAoaHRtbCB8fCAnJykucmVwbGFjZShzdHlsZVRhZ1BhdHRlcm4sICcnKS5yZXBsYWNlKHNjcmlwdFRhZ1BhdHRlcm4sICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHRyYWN0Qm9keUNvbnRlbnRzKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGh0bWwgPSB0aGlzLnJlbW92ZVN0eWxlQW5kU2NyaXB0VGFncyhodG1sKTtcclxuICAgIGNvbnN0IGJvZHlQYXR0ZXJuID0gLzxib2R5W14+XSo+KFtcXHNcXFNdKj8pPFxcL2JvZHk+L2dpO1xyXG4gICAgY29uc3QgbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSBib2R5UGF0dGVybi5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xyXG4gICAgICBtYXRjaGVzLnB1c2goKG1hdGNoWzFdID8/ICcnKS50cmltKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0xvY2FsaG9zdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBbJ2xvY2FsaG9zdCcsICcxMjcuMC4wLjEnLCAnOjoxJ10uaW5jbHVkZXMobG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVNhdmVDbGlja2VkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbGVhckJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGVhckJ1dHRvbicpO1xyXG4gICAgaWYgKGNsZWFyQnV0dG9uKSBjbGVhckJ1dHRvbi5oaWRkZW4gPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IHVuaXQ6ICdtbScsIGZvcm1hdDogJ2E0JyB9KTtcclxuXHJcbiAgICBsZXQgY3JlYXRlZFRlbXAgPSBmYWxzZTtcclxuICAgIGxldCByb290OiBIVE1MRWxlbWVudCB8IG51bGwgPVxyXG4gICAgICAodGhpcy5wZGZCb2R5Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fFxyXG4gICAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BkZkJvZHknKSBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFyb290KSB7XHJcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgcm9vdC5pZCA9ICdwZGZCb2R5JztcclxuICAgICAgcm9vdC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgIHJvb3Quc3R5bGUubGVmdCA9ICctOTk5OTlweCc7XHJcbiAgICAgIHJvb3Quc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICByb290LnN0eWxlLndpZHRoID0gJzc5NHB4JztcclxuICAgICAgcm9vdC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xyXG4gICAgICBjcmVhdGVkVGVtcCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWRkaXRpb25hbEZpbGVDb250ZW50cyAmJiAhcm9vdC5oYXNDaGlsZE5vZGVzKCkpIHtcclxuICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyh0aGlzLmFkZGl0aW9uYWxGaWxlQ29udGVudHMpO1xyXG4gICAgICBpZiAoaHRtbC5pbmNsdWRlcygnPGh0bWwnKSkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgIHJvb3QuaW5uZXJIVE1MID0gcGFyc2VkLmJvZHk/LmlubmVySFRNTCB8fCBodG1sO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJvb3QuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFsbFNlY3Rpb25zID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlY3Rpb24nKSk7XHJcbiAgICBjb25zdCBsZWFmU2VjdGlvbnMgPSBhbGxTZWN0aW9ucy5maWx0ZXIocyA9PiAhcy5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uJykpO1xyXG4gICAgY29uc3Qgbm9kZXNUb1JlbmRlcjogSFRNTEVsZW1lbnRbXSA9XHJcbiAgICAgIGxlYWZTZWN0aW9ucy5sZW5ndGggPyBsZWFmU2VjdGlvbnMgOiAoYWxsU2VjdGlvbnMubGVuZ3RoID8gYWxsU2VjdGlvbnMgOiBbcm9vdF0pO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzVG9SZW5kZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWwgPSBub2Rlc1RvUmVuZGVyW2ldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFVcmwgPSBhd2FpdCB0b0pwZWcoZWwsIHsgcXVhbGl0eTogMSwgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnIH0pO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGggPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKHBhZ2VXaWR0aCAvIHcsIHBhZ2VIZWlnaHQgLyBoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyVyA9IHcgKiBzY2FsZTtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVySCA9IGggKiBzY2FsZTtcclxuXHJcbiAgICAgICAgICAgIGRvYy5hZGRJbWFnZShkYXRhVXJsLCAnSlBHJywgMCwgMCwgcmVuZGVyVywgcmVuZGVySCk7XHJcbiAgICAgICAgICAgIGlmIChpIDwgbm9kZXNUb1JlbmRlci5sZW5ndGggLSAxKSBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaW1nLnNyYyA9IGRhdGFVcmw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdlbmVyYXRpbmcgaW1hZ2U6JywgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjcmVhdGVkVGVtcCAmJiByb290ICYmIHJvb3QucGFyZW50Tm9kZSkge1xyXG4gICAgICByb290LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW5hYmxlTG9jYWxQcmV2aWV3IGNhbiBiZSBlbmFibGVkIHRvIHNlZSB0aGUgb3V0cHV0IHdpdGhvdXQgc2VuZGluZyBlbWFpbFxyXG4gICAgaWYgKHRoaXMuZW5hYmxlTG9jYWxQcmV2aWV3ICYmIHRoaXMuX2lzTG9jYWxob3N0KCkpIHtcclxuICAgICAgY29uc3QgYmxvYiA9IGRvYy5vdXRwdXQoJ2Jsb2InKTtcclxuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgd2luZG93Lm9wZW4odXJsIGFzIHVua25vd24gYXMgc3RyaW5nLCAnX2JsYW5rJyk7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2xlYXJCdXR0b24pIGNsZWFyQnV0dG9uLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGVtcEZpbGUgPSBkb2Mub3V0cHV0KCdkYXRhdXJpc3RyaW5nJyk7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmRhdGFVUkl0b0Jsb2IodGVtcEZpbGUpO1xyXG4gICAgICBjb25zdCBmaWxlQXNDb0RvY3VtZW50ID0gYXdhaXQgRmlsZVV0aWxzLlJlYWRGaWxlQXNOZXdDb0RvY3VtZW50KGZpbGUpO1xyXG4gICAgICBmaWxlQXNDb0RvY3VtZW50LmZpbGVUeXBlID0gRmlsZVV0aWxzLklzSW1hZ2VGaWxlKGZpbGUpID8gRmlsZVR5cGUuSW1hZ2UgOiBGaWxlVHlwZS5Eb2N1bWVudDtcclxuICAgICAgZmlsZUFzQ29Eb2N1bWVudC5jcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBmaWxlQXNDb0RvY3VtZW50Lm1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGZpbGVBc0NvRG9jdW1lbnQucmVwb3J0cyA9IDE7XHJcbiAgICAgIHRoaXMuYWRkaXRpb25hbEZpbGVDaGFuZ2VFdmVudC5lbWl0KGZpbGVBc0NvRG9jdW1lbnQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdQREYgcGFja2FnaW5nIGZhaWxlZDonLCBlKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlUERGRGlhbG9nLmVtaXQoKTtcclxuICAgICAgaWYgKGNsZWFyQnV0dG9uKSBjbGVhckJ1dHRvbi5oaWRkZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRhVVJJdG9CbG9iKGRhdGFVUkkpOiBGaWxlIHtcclxuICAgIGNvbnN0IGJ5dGVTdHJpbmc6IHN0cmluZyA9IGF0b2IoZGF0YVVSSS5zcGxpdCgnLCcpWzFdKTtcclxuICAgIGNvbnN0IGFiOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBGaWxlKFthYl0sIHRoaXMuYWRkaXRpb25hbEZpbGVOYW1lICsgJy5wZGYnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGVhcigpOiB2b2lkIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zaWduYXR1cmVQYWRzKS5mb3JFYWNoKHNpZ25hdHVyZVBhZCA9PiB7XHJcbiAgICAgIHNpZ25hdHVyZVBhZD8uY2xlYXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU2lnbmF0dXJlQ2FudmFzKHNpZ25hdHVyZTogU2lnbmF0dXJlUGFkLCBzaWduYXR1cmVDYW52YXM6IEVsZW1lbnRSZWYpOiB2b2lkIHtcclxuICAgIGNvbnN0IGltYWdlQmVmb3JlUmVzaXplOiBzdHJpbmcgPSBzaWduYXR1cmUudG9EYXRhVVJMKCk7XHJcbiAgICBjb25zdCByYXRpbzogbnVtYmVyID0gTWF0aC5tYXgod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwgMSk7XHJcbiAgICBzaWduYXR1cmVDYW52YXMubmF0aXZlRWxlbWVudC53aWR0aCA9IHNpZ25hdHVyZUNhbnZhcy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogcmF0aW87XHJcbiAgICBzaWduYXR1cmVDYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQgPSBzaWduYXR1cmVDYW52YXMubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiByYXRpbztcclxuICAgIHNpZ25hdHVyZUNhbnZhcy5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoXCIyZFwiKS5zY2FsZShyYXRpbywgcmF0aW8pO1xyXG4gICAgc2lnbmF0dXJlLmZyb21EYXRhVVJMKGltYWdlQmVmb3JlUmVzaXplKTtcclxuICB9XHJcbn1cclxuIl19
|
package/favicon.ico
ADDED
|
Binary file
|
|
@@ -3488,22 +3488,17 @@ class CustomPdfDialogComponent {
|
|
|
3488
3488
|
this.additionalFileChangeEvent = new EventEmitter();
|
|
3489
3489
|
this.signaturePads = {};
|
|
3490
3490
|
this.signatureCanvases = {};
|
|
3491
|
+
this.fileBody = '';
|
|
3492
|
+
this.fileStyle = '';
|
|
3491
3493
|
this.showLoader = false;
|
|
3494
|
+
// set to true if you want to skip email for debug purposes
|
|
3495
|
+
this.enableLocalPreview = false;
|
|
3492
3496
|
}
|
|
3493
3497
|
showClass() {
|
|
3494
3498
|
return true;
|
|
3495
3499
|
}
|
|
3496
3500
|
ngOnInit() {
|
|
3497
|
-
|
|
3498
|
-
const head = document.getElementsByTagName('head')[0];
|
|
3499
|
-
const styles = this.extractStyleParts(this.additionalFileContents);
|
|
3500
|
-
this.fileStyle = styles[0];
|
|
3501
|
-
const style = document.createElement('style');
|
|
3502
|
-
style.appendChild(document.createTextNode(this.fileStyle));
|
|
3503
|
-
head.appendChild(style);
|
|
3504
|
-
const body = this.extractBodyContents(this.additionalFileContents);
|
|
3505
|
-
this.fileBody = this._sanitizer.bypassSecurityTrustHtml(body[0]);
|
|
3506
|
-
}
|
|
3501
|
+
this._processAdditionalFileContents();
|
|
3507
3502
|
}
|
|
3508
3503
|
ngAfterViewInit() {
|
|
3509
3504
|
['signatureCanvas', 'signatureCanvas2'].forEach(id => {
|
|
@@ -3545,75 +3540,144 @@ class CustomPdfDialogComponent {
|
|
|
3545
3540
|
}
|
|
3546
3541
|
});
|
|
3547
3542
|
}
|
|
3543
|
+
_processAdditionalFileContents() {
|
|
3544
|
+
var _a;
|
|
3545
|
+
if (!this.additionalFileContents)
|
|
3546
|
+
return;
|
|
3547
|
+
const styles = this.extractStyleParts(this.additionalFileContents);
|
|
3548
|
+
this.fileStyle = styles.join('\n').trim();
|
|
3549
|
+
if (this.fileStyle) {
|
|
3550
|
+
const head = document.getElementsByTagName('head')[0];
|
|
3551
|
+
const styleEl = document.createElement('style');
|
|
3552
|
+
styleEl.appendChild(document.createTextNode(this.fileStyle));
|
|
3553
|
+
head.appendChild(styleEl);
|
|
3554
|
+
}
|
|
3555
|
+
const bodyParts = this.extractBodyContents(this.additionalFileContents);
|
|
3556
|
+
const bodyHtml = ((_a = bodyParts[0]) !== null && _a !== void 0 ? _a : this.removeStyleAndScriptTags(this.additionalFileContents)).trim();
|
|
3557
|
+
this.fileBody = this._sanitizer.bypassSecurityTrustHtml(bodyHtml);
|
|
3558
|
+
}
|
|
3548
3559
|
extractStyleParts(html) {
|
|
3560
|
+
var _a;
|
|
3549
3561
|
const stylePattern = /<style[^>]*>([\s\S]*?)<\/style>/gi;
|
|
3550
3562
|
const matches = [];
|
|
3551
3563
|
let match;
|
|
3552
3564
|
while ((match = stylePattern.exec(html)) !== null) {
|
|
3553
|
-
matches.push(match[1].trim());
|
|
3565
|
+
matches.push(((_a = match[1]) !== null && _a !== void 0 ? _a : '').trim());
|
|
3554
3566
|
}
|
|
3555
3567
|
return matches;
|
|
3556
3568
|
}
|
|
3557
3569
|
removeStyleAndScriptTags(html) {
|
|
3558
3570
|
const styleTagPattern = /<style[^>]*>[\s\S]*?<\/style>/gi;
|
|
3559
3571
|
const scriptTagPattern = /<script[^>]*>[\s\S]*?<\/script>/gi;
|
|
3560
|
-
return html.replace(styleTagPattern, '').replace(scriptTagPattern, '');
|
|
3572
|
+
return (html || '').replace(styleTagPattern, '').replace(scriptTagPattern, '');
|
|
3561
3573
|
}
|
|
3562
3574
|
extractBodyContents(html) {
|
|
3575
|
+
var _a;
|
|
3563
3576
|
html = this.removeStyleAndScriptTags(html);
|
|
3564
|
-
const
|
|
3577
|
+
const bodyPattern = /<body[^>]*>([\s\S]*?)<\/body>/gi;
|
|
3565
3578
|
const matches = [];
|
|
3566
3579
|
let match;
|
|
3567
|
-
while ((match =
|
|
3568
|
-
matches.push(match[1].trim());
|
|
3580
|
+
while ((match = bodyPattern.exec(html)) !== null) {
|
|
3581
|
+
matches.push(((_a = match[1]) !== null && _a !== void 0 ? _a : '').trim());
|
|
3569
3582
|
}
|
|
3570
3583
|
return matches;
|
|
3571
3584
|
}
|
|
3585
|
+
_isLocalhost() {
|
|
3586
|
+
return ['localhost', '127.0.0.1', '::1'].includes(location.hostname);
|
|
3587
|
+
}
|
|
3572
3588
|
handleSaveClicked() {
|
|
3589
|
+
var _a, _b;
|
|
3573
3590
|
return __awaiter(this, void 0, void 0, function* () {
|
|
3574
3591
|
this.showLoader = true;
|
|
3575
3592
|
const clearButton = document.getElementById('clearButton');
|
|
3576
|
-
clearButton
|
|
3577
|
-
|
|
3578
|
-
const
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3593
|
+
if (clearButton)
|
|
3594
|
+
clearButton.hidden = true;
|
|
3595
|
+
const doc = new jsPDF({ unit: 'mm', format: 'a4' });
|
|
3596
|
+
let createdTemp = false;
|
|
3597
|
+
let root = ((_a = this.pdfBody) === null || _a === void 0 ? void 0 : _a.nativeElement) ||
|
|
3598
|
+
document.querySelector('#pdfBody');
|
|
3599
|
+
if (!root) {
|
|
3600
|
+
root = document.createElement('div');
|
|
3601
|
+
root.id = 'pdfBody';
|
|
3602
|
+
root.style.position = 'fixed';
|
|
3603
|
+
root.style.left = '-99999px';
|
|
3604
|
+
root.style.top = '0';
|
|
3605
|
+
root.style.width = '794px';
|
|
3606
|
+
root.style.pointerEvents = 'none';
|
|
3607
|
+
document.body.appendChild(root);
|
|
3608
|
+
createdTemp = true;
|
|
3609
|
+
}
|
|
3610
|
+
if (this.additionalFileContents && !root.hasChildNodes()) {
|
|
3611
|
+
const html = String(this.additionalFileContents);
|
|
3612
|
+
if (html.includes('<html')) {
|
|
3613
|
+
const parsed = new DOMParser().parseFromString(html, 'text/html');
|
|
3614
|
+
root.innerHTML = ((_b = parsed.body) === null || _b === void 0 ? void 0 : _b.innerHTML) || html;
|
|
3615
|
+
}
|
|
3616
|
+
else {
|
|
3617
|
+
root.innerHTML = html;
|
|
3618
|
+
}
|
|
3619
|
+
}
|
|
3620
|
+
const allSections = Array.from(root.querySelectorAll('section'));
|
|
3621
|
+
const leafSections = allSections.filter(s => !s.querySelector('section'));
|
|
3622
|
+
const nodesToRender = leafSections.length ? leafSections : (allSections.length ? allSections : [root]);
|
|
3623
|
+
const pageWidth = doc.internal.pageSize.getWidth();
|
|
3624
|
+
const pageHeight = doc.internal.pageSize.getHeight();
|
|
3625
|
+
for (let i = 0; i < nodesToRender.length; i++) {
|
|
3626
|
+
const el = nodesToRender[i];
|
|
3583
3627
|
try {
|
|
3584
|
-
const dataUrl = yield toJpeg(
|
|
3585
|
-
quality: 1,
|
|
3586
|
-
backgroundColor: 'white'
|
|
3587
|
-
});
|
|
3588
|
-
const img = new Image();
|
|
3589
|
-
img.src = dataUrl;
|
|
3628
|
+
const dataUrl = yield toJpeg(el, { quality: 1, backgroundColor: 'white' });
|
|
3590
3629
|
yield new Promise((resolve) => {
|
|
3630
|
+
const img = new Image();
|
|
3591
3631
|
img.onload = () => {
|
|
3592
|
-
const
|
|
3593
|
-
const
|
|
3594
|
-
|
|
3595
|
-
|
|
3632
|
+
const w = img.width;
|
|
3633
|
+
const h = img.height;
|
|
3634
|
+
const scale = Math.min(pageWidth / w, pageHeight / h);
|
|
3635
|
+
const renderW = w * scale;
|
|
3636
|
+
const renderH = h * scale;
|
|
3637
|
+
doc.addImage(dataUrl, 'JPG', 0, 0, renderW, renderH);
|
|
3638
|
+
if (i < nodesToRender.length - 1)
|
|
3596
3639
|
doc.addPage();
|
|
3597
|
-
}
|
|
3598
3640
|
resolve();
|
|
3599
3641
|
};
|
|
3642
|
+
img.src = dataUrl;
|
|
3600
3643
|
});
|
|
3601
3644
|
}
|
|
3602
|
-
catch (
|
|
3603
|
-
console.error('Error generating image:',
|
|
3645
|
+
catch (err) {
|
|
3646
|
+
console.error('Error generating image:', err);
|
|
3604
3647
|
}
|
|
3605
3648
|
}
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3649
|
+
if (createdTemp && root && root.parentNode) {
|
|
3650
|
+
root.parentNode.removeChild(root);
|
|
3651
|
+
}
|
|
3652
|
+
// enableLocalPreview can be enabled to see the output without sending email
|
|
3653
|
+
if (this.enableLocalPreview && this._isLocalhost()) {
|
|
3654
|
+
const blob = doc.output('blob');
|
|
3655
|
+
const url = URL.createObjectURL(blob);
|
|
3656
|
+
window.open(url, '_blank');
|
|
3657
|
+
this.showLoader = false;
|
|
3658
|
+
if (clearButton)
|
|
3659
|
+
clearButton.hidden = false;
|
|
3660
|
+
return;
|
|
3661
|
+
}
|
|
3662
|
+
try {
|
|
3663
|
+
const tempFile = doc.output('datauristring');
|
|
3664
|
+
const file = this.dataURItoBlob(tempFile);
|
|
3665
|
+
const fileAsCoDocument = yield FileUtils.ReadFileAsNewCoDocument(file);
|
|
3666
|
+
fileAsCoDocument.fileType = FileUtils.IsImageFile(file) ? FileType$1.Image : FileType$1.Document;
|
|
3667
|
+
fileAsCoDocument.creationDate = new Date();
|
|
3668
|
+
fileAsCoDocument.modifiedDate = new Date();
|
|
3669
|
+
fileAsCoDocument.reports = 1;
|
|
3670
|
+
this.additionalFileChangeEvent.emit(fileAsCoDocument);
|
|
3671
|
+
}
|
|
3672
|
+
catch (e) {
|
|
3673
|
+
console.error('PDF packaging failed:', e);
|
|
3674
|
+
}
|
|
3675
|
+
finally {
|
|
3676
|
+
this.showLoader = false;
|
|
3677
|
+
this.closePDFDialog.emit();
|
|
3678
|
+
if (clearButton)
|
|
3679
|
+
clearButton.hidden = false;
|
|
3680
|
+
}
|
|
3617
3681
|
});
|
|
3618
3682
|
}
|
|
3619
3683
|
dataURItoBlob(dataURI) {
|
|
@@ -3651,7 +3715,7 @@ CustomPdfDialogComponent.decorators = [
|
|
|
3651
3715
|
<div *ngIf="showLoader" class="loader-container">
|
|
3652
3716
|
<co-loader *ngIf="showLoader"></co-loader>
|
|
3653
3717
|
</div>
|
|
3654
|
-
|
|
3718
|
+
|
|
3655
3719
|
<div #pdfBody id="pdfBody">
|
|
3656
3720
|
<section [innerHTML]="fileBody"></section>
|
|
3657
3721
|
</div>
|