@wavemaker/app-ng-runtime 12.0.0-next.140488 → 12.0.0-next.140491
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.
- app-ng-runtime/components/input/default/bundles/index.umd.js +3 -0
- app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +4 -1
- app-ng-runtime/components/input/default/fesm2022/index.mjs +3 -0
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +3 -2
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +3 -0
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -1
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +3 -0
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +12 -2
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +15 -5
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +13 -3
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +4 -2
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +1 -1
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +2 -2
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +1 -1
- app-ng-runtime/core/esm2022/utils/utils.mjs +2 -2
- app-ng-runtime/core/fesm2022/index.mjs +1 -1
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +1 -1
- app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +2 -2
- app-ng-runtime/runtime/base/fesm2022/index.mjs +1 -1
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
|
@@ -542,7 +542,15 @@
|
|
|
542
542
|
this.changeServerUploadPath(nv);
|
|
543
543
|
break;
|
|
544
544
|
case 'contenttype':
|
|
545
|
-
this.
|
|
545
|
+
if (this.defaultAllowedExtensions.includes('*/*')) {
|
|
546
|
+
this.chooseFilter = nv.split(' ').join(',');
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
this.chooseFilter = this.defaultAllowedExtensions.filter(item => nv.split(' ').join(',').includes(item));
|
|
550
|
+
if (lodashEs.isEmpty(this.chooseFilter)) {
|
|
551
|
+
this.chooseFilter = this.defaultAllowedExtensions;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
546
554
|
break;
|
|
547
555
|
case 'multiple':
|
|
548
556
|
this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');
|
|
@@ -579,7 +587,9 @@
|
|
|
579
587
|
file: undefined,
|
|
580
588
|
uploadPath: undefined
|
|
581
589
|
};
|
|
582
|
-
this.
|
|
590
|
+
this.allowedFileUploadExtensions = i1.getWmProjectProperties().allowedFileUploadExtensions;
|
|
591
|
+
this.defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);
|
|
592
|
+
this.chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;
|
|
583
593
|
this.fileUploadMessage = 'Drop your files here or click here to browse';
|
|
584
594
|
this.uploadedFiles = {
|
|
585
595
|
fileName: '',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Attribute, Component, Injector, Optional
|
|
1
|
+
import { Attribute, Component, Inject, Injector, Optional } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
|
-
import { App, DataSource, isAudioFile, isImageFile, isVideoFile } from '@wm/core';
|
|
3
|
+
import { App, DataSource, getWmProjectProperties, isAudioFile, isImageFile, isVideoFile } from '@wm/core';
|
|
4
4
|
import { provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
|
|
5
5
|
import { registerProps } from './file-upload.props';
|
|
6
6
|
import { forEach, includes, isEmpty, toLower } from "lodash-es";
|
|
@@ -493,7 +493,15 @@ export class FileUploadComponent extends StylableComponent {
|
|
|
493
493
|
this.changeServerUploadPath(nv);
|
|
494
494
|
break;
|
|
495
495
|
case 'contenttype':
|
|
496
|
-
this.
|
|
496
|
+
if (this.defaultAllowedExtensions.includes('*/*')) {
|
|
497
|
+
this.chooseFilter = nv.split(' ').join(',');
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
this.chooseFilter = this.defaultAllowedExtensions.filter(item => nv.split(' ').join(',').includes(item));
|
|
501
|
+
if (isEmpty(this.chooseFilter)) {
|
|
502
|
+
this.chooseFilter = this.defaultAllowedExtensions;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
497
505
|
break;
|
|
498
506
|
case 'multiple':
|
|
499
507
|
this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');
|
|
@@ -530,7 +538,9 @@ export class FileUploadComponent extends StylableComponent {
|
|
|
530
538
|
file: undefined,
|
|
531
539
|
uploadPath: undefined
|
|
532
540
|
};
|
|
533
|
-
this.
|
|
541
|
+
this.allowedFileUploadExtensions = getWmProjectProperties().allowedFileUploadExtensions;
|
|
542
|
+
this.defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);
|
|
543
|
+
this.chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;
|
|
534
544
|
this.fileUploadMessage = 'Drop your files here or click here to browse';
|
|
535
545
|
this.uploadedFiles = {
|
|
536
546
|
fileName: '',
|
|
@@ -593,4 +603,4 @@ export class FileUploadComponent extends StylableComponent {
|
|
|
593
603
|
type: Optional
|
|
594
604
|
}] }], null); })();
|
|
595
605
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FileUploadComponent, { className: "FileUploadComponent", filePath: "file-upload.component.ts", lineNumber: 27 }); })();
|
|
596
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2ZpbGUtdXBsb2FkL3NyYy9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZmlsZS11cGxvYWQvc3JjL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7O0lDQTFDLGlDQUFzUTtJQUEvRCxBQUFsQyw2TEFBUyw4QkFBdUIsS0FBQyxrTEFBVyxnREFBeUMsS0FBQztJQUEzUCxpQkFBc1E7OztJQUF6SCxBQUF0QiwwQ0FBcUIsK0JBQXdCOzs7OztJQUxoTCxBQURKLDhCQUFzRSxhQUMwSDtJQUE3QixBQUF0QyxBQUFyRiw0S0FBUywwQkFBbUIsS0FBQywyS0FBb0UsOEJBQXVCLEtBQUUsbUtBQVMseUJBQWtCLEtBQUU7SUFDdkwsb0JBQTZCO0lBQzdC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QUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO29GQTdWUSxtQkFBbUIsd0ZBcVU0QixjQUFjLHdCQUE4QixrQkFBa0I7b0VBclU3RyxtQkFBbUIsMEVBTGpCO2dCQUNQLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO2FBQzFDO1lDdkJMLDhCQUF3QztZQXVFcEMsQUFwQ0EsQUFMQSxBQWZBLEFBYkEscUVBQXNFLHdEQWFrQiw2REFlc0MscURBS0EscURBb0NnRTtZQWVsTSxpQkFBTTs7WUFwRmtDLGNBQWdDO1lBQWhDLHlEQUFnQztZQWEvQixjQUFpRDtZQUFqRCw4RUFBaUQ7WUFlN0UsY0FBZ0I7WUFBaEIscUNBQWdCO1lBS29FLGNBQThCO1lBQTlCLG1EQUE4QjtZQW9DZ0MsY0FBZ0M7WUFBaEMscURBQWdDOzs7aUZEN0NsTCxtQkFBbUI7Y0FSL0IsU0FBUzsyQkFDSSxnQkFBZ0IsYUFFZjtvQkFDUCxrQkFBa0IscUJBQXFCO2lCQUMxQzs7c0JBd1U2QyxTQUFTO3VCQUFDLGNBQWM7O3NCQUF1QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTs7a0ZBclV4SCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QXBwLCBEYXRhU291cmNlLCBpc0F1ZGlvRmlsZSwgaXNJbWFnZUZpbGUsIGlzVmlkZW9GaWxlfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vZmlsZS11cGxvYWQucHJvcHMnO1xuaW1wb3J0IHtmb3JFYWNoLCBpbmNsdWRlcywgaXNFbXB0eSwgdG9Mb3dlcn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1maWxldXBsb2FkJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWZpbGV1cGxvYWQnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtRmlsZVVwbG9hZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihGaWxlVXBsb2FkQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBzZWxlY3RlZEZpbGVzOiBhbnkgPSBbXTtcbiAgICBzZWxlY3RlZEZvbGRlcnM6IGFueSA9IFtdO1xuICAgIHByb2dyZXNzT2JzZXJ2YWJsZTtcbiAgICBuYW1lO1xuICAgIGhpbnQ7XG4gICAgbXVsdGlwbGU7XG4gICAgZmlsZVRyYW5zZmVycyA9IHt9O1xuICAgIGNhcHRpb24gPSAnVXBsb2FkJztcbiAgICBmb3JtTmFtZSA9ICcnO1xuICAgIG1heGZpbGVzaXplO1xuICAgIGNsZWFyaWNvbmNsYXNzO1xuICAgIGNsZWFyaWNvbmhpbnQ7XG4gICAgc2VsZWN0ZWRVcGxvYWRUeXBlUGF0aDtcbiAgICBERUZBVUxUX0NBUFRJT05TID0ge1xuICAgICAgICBNVUxUSVBMRV9TRUxFQ1Q6ICdEcm9wIHlvdXIgZmlsZXMgaGVyZS4nLFxuICAgICAgICBTRUxFQ1Q6ICdTZWxlY3QnXG4gICAgfTtcbiAgICBERVZJQ0VfQ09OVEVOVFRZUEVTID0ge1xuICAgICAgICBJTUFHRTogJ2ltYWdlJyxcbiAgICAgICAgVklERU86ICd2aWRlbycsXG4gICAgICAgIEFVRElPOiAnYXVkaW8nLFxuICAgICAgICBGSUxFUzogJ2ZpbGVzJ1xuICAgIH07XG4gICAgRklMRVNJWkVfTUIgPSAxMDQ4NTc2O1xuICAgIHdpZGdldFByb3BzO1xuICAgIF9pc01vYmlsZVR5cGU7XG4gICAgX2lzQ29yZG92YTtcbiAgICAvLyBwYXJlbnRQcmVmYWJTY29wZSA9IGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wcmVmYWInKS5pc29sYXRlU2NvcGUoKSxcbiAgICBDT05TVEFOVF9GSUxFX1NFUlZJQ0UgPSAnRmlsZVNlcnZpY2UnO1xuICAgIHVwbG9hZERhdGEgPSB7XG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgdXBsb2FkUGF0aDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBjaG9vc2VGaWx0ZXIgPSAnJztcbiAgICBkYXRhc291cmNlO1xuICAgIGZpbGVVcGxvYWRNZXNzYWdlID0gJ0Ryb3AgeW91ciBmaWxlcyBoZXJlIG9yIGNsaWNrIGhlcmUgdG8gYnJvd3NlJztcbiAgICB1cGxvYWRlZEZpbGVzID0ge1xuICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgIHBhdGg6ICcnLFxuICAgICAgICBsZW5ndGg6ICcnLFxuICAgICAgICBzdGF0dXM6ICcnXG4gICAgfTtcbiAgICBoaWdobGlnaHREcm9wQXJlYTtcbiAgICAvKl9oYXNPblN1Y2Nlc3NFdnQgPSBXTS5pc0RlZmluZWQoYXR0cnMub25TdWNjZXNzKTtcbiAgICAgX2hhc09uRXJyb3JFdnQgPSBXTS5pc0RlZmluZWQoYXR0cnMub25FcnJvcik7Ki9cblxuICAgIC8vIENoZWNraW5nIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIHZhbGlkIGZvciB0aGUgY2hvb3NlbiBmaWx0ZXIgdHlwZVxuICAgIGlzVmFsaWRGaWxlKGZpbGVuYW1lLCBjb250ZW50dHlwZSwgZXh0ZW5zaW9uTmFtZSwgaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkLCBjb250ZW50VHlwZXM7XG5cbiAgICAgICAgaWYgKCFjb250ZW50dHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudFR5cGVzID0gdG9Mb3dlcihjb250ZW50dHlwZSkuc3BsaXQoJywnKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXMoY29udGVudFR5cGVzLCAnaW1hZ2UvKicpIHx8IChpbmNsdWRlcyhjb250ZW50VHlwZXMsICdpbWFnZScpICYmIGlzTW9iaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBpc0ltYWdlRmlsZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGNvbnRlbnQgdHlwZSBjaG9zZW4gaXMgaW1hZ2UgYW5kIHVzZXIgdXBsb2FkcyBpbWFnZSBpdCBpcyB2YWxpZCBmaWxlXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmNsdWRlcyhjb250ZW50VHlwZXMsICdhdWRpby8qJykgfHwgKGluY2x1ZGVzKGNvbnRlbnRUeXBlcywgJ2F1ZGlvJykgJiYgaXNNb2JpbGVUeXBlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGlzQXVkaW9GaWxlKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgY29udGVudCB0eXBlIGNob3NlbiBpcyBhdWRpby8qIGFuZCB1c2VyIHVwbG9hZHMgYXVkaW8gaXQgaXMgdmFsaWQgZmlsZVxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZXMoY29udGVudFR5cGVzLCAndmlkZW8vKicpIHx8IChpbmNsdWRlcyhjb250ZW50VHlwZXMsICd2aWRlbycpICYmIGlzTW9iaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBpc1ZpZGVvRmlsZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGNvbnRlbnQgdHlwZSBjaG9zZW4gaXMgdmlkZW8vKiBhbmQgdXNlciB1cGxvYWRzIHZpZGVvIGl0IGlzIHZhbGlkIGZpbGVcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypjb250ZW50IHR5cGUgYW5kIHRoZSB1cGxvYWRlZCBmaWxlIGV4dGVuc2lvbiBzaG91bGQgYmUgc2FtZSovXG4gICAgICAgIGlmIChpbmNsdWRlcyhjb250ZW50VHlwZXMsICcuJyArIHRvTG93ZXIoZXh0ZW5zaW9uTmFtZSkpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG5cbiAgICAvKiB0aGlzIHJldHVybiB0aGUgYXJyYXkgb2YgZmlsZXMgd2hpY2ggYXJlIGhhdmluZyB0aGUgZmlsZSBzaXplIG5vdCBtb3JlIHRoYW4gbWF4ZmlsZXNpemUgYW5kIGZpbHRlcnMgYmFzZWQgb24gY29udGVudHR5cGUgKi9cbiAgICBnZXRWYWxpZEZpbGVzKCRmaWxlcykge1xuICAgICAgICBjb25zdCB2YWxpZEZpbGVzID0gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsZXMgPSBbXTtcbiAgICAgICAgY29uc3QgTUFYRklMRVVQTE9BRF9TSVpFID0gcGFyc2VGbG9hdCh0aGlzLm1heGZpbGVzaXplKSAqIHRoaXMuRklMRVNJWkVfTUIgfHwgdGhpcy5GSUxFU0laRV9NQjtcbiAgICAgICAgY29uc3QgTUFYX0ZJTEVfVVBMT0FEX0ZPUk1BVFRFRF9TSVpFID0gKHRoaXMubWF4ZmlsZXNpemUgfHwgJzEnKSArICdNQic7XG5cbiAgICAgICAgLy8gaWYgY29udGVudHR5cGUgaXMgZmlsZXMgZm9yIG1vYmlsZSBwcm9qZWN0cy5cbiAgICAgICAgaWYgKHRoaXMuY2hvb3NlRmlsdGVyID09PSB0aGlzLkRFVklDRV9DT05URU5UVFlQRVMuRklMRVMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hvb3NlRmlsdGVyID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKCRmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIC8qIGNoZWNrIGZvciB0aGUgZmlsZSBjb250ZW50IHR5cGUgYmVmb3JlIHVwbG9hZGluZyAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRGaWxlKGZpbGUubmFtZSwgdGhpcy5jaG9vc2VGaWx0ZXIsIHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlLm5hbWUpLCB0aGlzLl9pc01vYmlsZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfRklMRV9FWFRFTlRJT05fVkFMSURBVElPTl9NRVNTQUdFfSAke3RoaXMuY2hvb3NlRmlsdGVyfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvckZpbGVzKCdJTlZBTElEX0ZJTEVfRVhURU5TSU9OJywgbXNnLCBmaWxlLCBlcnJvckZpbGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYRklMRVVQTE9BRF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfRklMRV9FWENFRURfVkFMSURBVElPTl9NRVNTQUdFfSAke01BWF9GSUxFX1VQTE9BRF9GT1JNQVRURURfU0laRX1gO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JGaWxlcygnSU5WQUxJRF9GSUxFX1NJWkUnLCBtc2csIGZpbGUsIGVycm9yRmlsZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZEZpbGVzOiB2YWxpZEZpbGVzLFxuICAgICAgICAgICAgZXJyb3JGaWxlczogZXJyb3JGaWxlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yRmlsZXMoa2V5LCBtc2csIGZpbGUsIGVycm9yRmlsZXMpIHtcbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZXJyb3IgY2FsbGJhY2sgZXhpc3Qgb3Igbm90LiBJZiBpdCBleGlzdHMgdGhlbiBkb250IHNob3cgdGFvc3RlciBtZXNzYWdlXG4gICAgICAgIGlmICghdGhpcy5oYXNFdmVudENhbGxiYWNrKCdlcnJvcicpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAobXNnLCAnRXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbWVzc2FnZTogbXNnXG4gICAgICAgIH07XG4gICAgICAgIGZpbGUuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgZXJyb3JGaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cblxuICAgIC8qT3ZlcndyaXRlIHRoZSBjYXB0aW9uIG9ubHkgaWYgdGhleSBhcmUgZGVmYXVsdCovXG4gICAgZ2V0Q2FwdGlvbihjYXB0aW9uLCBpc011bHRpcGxlLCBpc01vYmlsZVR5cGUpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMuREVGQVVMVF9DQVBUSU9OUywgY2FwdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBpc011bHRpcGxlICYmICFpc01vYmlsZVR5cGUgPyB0aGlzLkRFRkFVTFRfQ0FQVElPTlMuTVVMVElQTEVfU0VMRUNUIDogdGhpcy5ERUZBVUxUX0NBUFRJT05TLlNFTEVDVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FwdGlvbjtcbiAgICB9XG5cbiAgICB1cGxvYWRVcmwgPSAnc2VydmljZXMnO1xuXG4gICAgLyogY2hhbmdlIHNlcnZlciBwYXRoIGJhc2VkIG9uIHVzZXIgb3B0aW9uICovXG4gICAgY2hhbmdlU2VydmVyVXBsb2FkUGF0aChwYXRoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRUeXBlUGF0aCA9IHBhdGg7XG4gICAgfVxuXG4gICAgLyogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaWxlZXh0ZW5zaW9uICovXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSkge1xuICAgICAgICBpZiAoZmlsZU5hbWUgJiYgaW5jbHVkZXMoZmlsZU5hbWUsICcuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZmlsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgc2VsZWN0IEV2ZW50XG4gICAgICogQHBhcmFtICRldmVudFxuICAgICAqIEBwYXJhbSAkZmlsZXNcbiAgICAgKi9cbiAgICBvblNlbGVjdEV2ZW50Q2FsbCgkZXZlbnQsICRmaWxlcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSAkZmlsZXM7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkLmV4dGVuZCgkZXZlbnQuJGZpbGVzIHx8IHt9LCAkZmlsZXMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsZXM6ICRmaWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsZUVsZW1DbGljaygkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHREcm9wQXJlYSA9IHRydWU7XG5cbiAgICAgICAgLy9UaGUgZmlsZSB1cGxvYWQgd2lkZ2V0IHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gbnVsbCB0byByZXVwbG9hZCB0aGUgc2FtZSBmaWxlLlxuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5maWxlLWlucHV0JylbMF0udmFsdWUgPSBudWxsO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gd2hlbiB0aGUgZmlsZXBpY2tlciBpcyBub3QgdGhlcmUgb24gdGhlIHdpbmRvdywgcmVtb3ZlIHRoZSBkcm9wem9uZSBoaWdobGlnaHRcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5kaXNhYmxlRHJvcFpvbmUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZURyb3Bab25lKCkge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodERyb3BBcmVhID0gZmFsc2U7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZGlzYWJsZURyb3Bab25lKTtcbiAgICB9XG5cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHNwZWNpZmllZCBmaWxlLiBpZiBhcmd1bWVudCBpcyBub3QgcHJvdmlkZWQsIGl0IGNsZWFycyB0aGUgY29tcGxldGUgbGlzdCAgKi9cbiAgICBjbGVhcihmaWxlT2JqKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IChmaWxlT2JqKSA/IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IGZpbGUgIT09IGZpbGVPYmopIDogW107XG4gICAgfVxuXG4gICAgLyp0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgY2xhc3MgbmFtZXMgZm9yIGNsZWFyIGljb24gKi9cbiAgICBzZXRDbGVhckljb25DbGFzcyhjbGFzc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJpY29uY2xhc3MgPSBjbGFzc1ZhbHVlO1xuICAgIH1cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBoaW50IGZvciBjbGVhciBpY29uICovXG4gICAgc2V0Q2xlYXJJY29uSGludChoaW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJpY29uaGludCA9IGhpbnQ7XG4gICAgfVxuXG5cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gYXBwZW5kIHVwbG9hZCBzdGF0dXMgZG9tIGVsZW1lbnRzIHRvIHdpZGdldCAqL1xuICAgIG9uRmlsZVNlbGVjdCgkZXZlbnQsICRmaWxlcykge1xuICAgICAgICBsZXQgYmVmb3JlU2VsZWN0VmFsO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZ2V0VmFsaWRGaWxlcygkZmlsZXMpO1xuICAgICAgICAkZmlsZXMgPSBmaWxlcy52YWxpZEZpbGVzO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IHRyaWVkIHVwbG9hZGluZyBmb2xkZXJzIHVzaW5nIGRyb3AsIGFuZCB0aGVuIHVwbG9hZGluZyB1c2luZyBjbGljayBtZXRob2Qgd2UgY2xlYXIgdGhlIGZvbGRlcnMgZG9tXG4gICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gXCJjaGFuZ2VcIikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlcnMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyaWdnZXIgZXJyb3IgY2FsbGJhY2sgZXZlbnQgaWYgYW55IGludmFsaWQgZmlsZSBmb3VuZC5cbiAgICAgICAgaWYgKCFpc0VtcHR5KGZpbGVzLmVycm9yRmlsZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMuZXJyb3JGaWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIGNhbGwgaWYgdGhlcmUgYXJlIHZhbGlkIGZpbGVzIGVsc2Ugbm8gY2FsbCBpcyBtYWRlXG4gICAgICAgIGlmICgkZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgICAgICAvLyBFVkVOVDogT05fQkVGT1JFX1NFTEVDVFxuICAgICAgICAgICAgYmVmb3JlU2VsZWN0VmFsID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkLmV4dGVuZCgkZXZlbnQuJGZpbGVzIHx8IHt9LCAkZmlsZXMpLFxuICAgICAgICAgICAgICAgIGZpbGVzOiAkZmlsZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5fcHJvZ3Jlc3NPYnNlcnZhYmxlID0gdGhpcy5wcm9ncmVzc09ic2VydmFibGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLl9wcm9ncmVzc09ic2VydmFibGUuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChwcm9ncmVzc09iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuc2VsZWN0ZWRGaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IHByb2dyZXNzT2JqLmZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IHByb2dyZXNzT2JqLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnByb2dyZXNzID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSBwcm9ncmVzc09iai5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc09iai5lcnJNc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZXJyTXNnID0gcHJvZ3Jlc3NPYmouZXJyTXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gJGZpbGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJlZm9yZVNlbGVjdFZhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBFVkVOVDogT05fU0VMRUNUXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEV2ZW50Q2FsbCgkZXZlbnQsICRmaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgKFByZXZlbnQgZmlsZSBmcm9tIGJlaW5nIG9wZW5lZClcbiAgICBkcmFnT3ZlckhhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBmaWxlIGRhdGEgaWYgaXQgZXhpc3RzIGFuZCBjYWxsIHRoZSBvbkZpbGVTZWxlY3QgZnVuY3Rpb25cbiAgICBvbkZpbGVEcm9wKCRldmVudCkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGxpc3RPZkZpbGVzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXJzID0gW107XG4gICAgICAgIGNvbnN0IGZpbGVzRGF0YSA9ICRldmVudC5kYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICAgIGlmIChmaWxlc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gVXNlIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFjZSB0byBhY2Nlc3MgdGhlIGZpbGUocylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXNEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgdGhlIGZpbGVzIGFuZCBwdXNoIHRoZW0gaW50byBhbiBhcnJheVxuICAgICAgICAgICAgICAgIGlmIChmaWxlc0RhdGFbaV0ud2Via2l0R2V0QXNFbnRyeSgpLmlzRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0T2ZGaWxlcy5wdXNoKGZpbGVzRGF0YVtpXS5nZXRBc0ZpbGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIGEgc2VsZWN0ZWQgaXRlbSBpcyBkaXJlY3RvcnkgcHVzaCB0aGUgZm9sZGVyIGVsZW1lbnQgaW50byBhbiBhcnJheSBhbmQgZGlzcGxheSBlcnJvciBtZXNzYWdlIGJ5IGFkZGluZyB0byBkb21cbiAgICAgICAgICAgICAgICBlbHNlIGlmKGZpbGVzRGF0YVtpXS53ZWJraXRHZXRBc0VudHJ5KCkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlcnMucHVzaChmaWxlc0RhdGFbaV0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0KCRldmVudCwgbGlzdE9mRmlsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ092ZXJDYihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJyNkcm9wem9uZScpLmFkZENsYXNzKCdoaWdobGlnaHQtZHJvcC1ib3gnKTtcbiAgICB9XG5cbiAgICBkcm9wQ2IoKSB7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcjZHJvcHpvbmUnKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWRyb3AtYm94Jyk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBmaWxlIHNlbGVjdCB3aW5kb3csIHdoZW4gY2xpY2tlZCBhbnl3aGVyZSBvbiB0aGUgZmlsZSB1cGxvYWQgd2lkZ2V0IGluIGNhc2Ugb2YgbXVsdGkgc2VsZWN0XG4gICAgdHJpZ2dlckZpbGVTZWxlY3QoKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmZpbGUtaW5wdXQnKS50cmlnZ2VyKCdjbGljaycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFib3J0cyBhIGZpbGUgdXBsb2FkIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gJGZpbGUsIHRoZSBmaWxlIGZvciB3aGljaCB0aGUgcmVxdWVzdCBpcyB0byBiZSBhYm9ydGVkXG4gICAgICovXG4gICAgYWJvcnRGaWxlVXBsb2FkKCRmaWxlKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkNBTkNFTCwgJGZpbGUpO1xuICAgIH1cblxuICAgIC8qIERlZmluZSB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgd2lkZ2V0IHByb3BlcnR5ICovXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdikge1xuICAgICAgICAvKk1vbml0b3JpbmcgY2hhbmdlcyBmb3Igc3R5bGVzIG9yIHByb3BlcnRpZXMgYW5kIGFjY29yZGluZ2x5IGhhbmRsaW5nIHJlc3BlY3RpdmUgY2hhbmdlcy4qL1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAndXBsb2FkcGF0aCc6XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTcmluaXZhczogd2h5IGRvIHdlIG5lZWQgdXBsb2FkcGF0aFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmVyVXBsb2FkUGF0aChudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb250ZW50dHlwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jaG9vc2VGaWx0ZXIgPSBudi5zcGxpdCgnICcpLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1OYW1lID0gdGhpcy5uYW1lICsgKHRoaXMubXVsdGlwbGUgPyAnLW11bHRpcGxlLWZpbGV1cGxvYWQnIDogJy1zaW5nbGUtZmlsZXVwbG9hZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwdGlvbiA9IHRoaXMuZ2V0Q2FwdGlvbih0aGlzLmNhcHRpb24sIHRoaXMubXVsdGlwbGUsIHRoaXMuX2lzTW9iaWxlVHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaWxldXBsb2FkbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkTWVzc2FnZSA9IG52O1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBhcHA6IEFwcCwgQEF0dHJpYnV0ZSgnc2VsZWN0LmV2ZW50JykgcHVibGljIG9uU2VsZWN0RXZ0LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICAvLyBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgLy8gYWRkaW5nLCBkcmFnb3ZlciBhbmQgZHJvcCBvbiB0aGUgZG9jdW1lbnQgYXMgd2hlbiBmaWxlIGlzIGRyYWdnZWQgb24gdG8gdGhlIHBhZ2UgaGlnaGxpZ2h0IHRoZSBkcm9wem9uZXMgYW5kIHJlbW92ZSBoaWdobGlnaHQgb24gZmlsZSBkcm9wXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnT3ZlckNiLmJpbmQodGhpcykpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5kcm9wQ2IuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gYWRkaW5nIG1vdXNlbGVhdmUgZXZudCB0byByZW1vdmUgaGlnaGxpZ2h0IHdoZW4gZmlsZSBpcyBkcm9wcGVkIG91dHNpZGUgdGhlIHdpbmRvd1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5kcm9wQ2IuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdHlsZXIoIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYXBwLWJ1dHRvbiwgLmRyb3AtYm94JyksIHRoaXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ092ZXJDYik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BDYik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmRyb3BDYik7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC1maWxldXBsb2FkXCIgaW5pdC13aWRnZXQ+XG4gICAgPCEtLSBkcmFnIGFuZCBkcm9wIGZpbGVzIFVJIGluIHdlYiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLW11bHRpLWZpbGUtdXBsb2FkXCIgKm5nSWY9XCIhX2lzTW9iaWxlVHlwZSAmJiBtdWx0aXBsZVwiPlxuICAgICAgICA8ZGl2IGlkPVwiZHJvcHpvbmVcIiBjbGFzcz1cImRyb3AtYm94XCIgKGNsaWNrKT1cInRyaWdnZXJGaWxlU2VsZWN0KClcIiBbbmdDbGFzc109XCJ7J2hpZ2hsaWdodC1kcm9wLWJveCcgOiBoaWdobGlnaHREcm9wQXJlYX1cIiAoZHJhZ292ZXIpPVwiZHJhZ092ZXJIYW5kbGVyKCRldmVudCk7XCIgKGRyb3ApPVwib25GaWxlRHJvcCgkZXZlbnQpO1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2ljb25jbGFzc319XCI+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2lubmVySHRtbF09XCJjYXB0aW9uXCIgY2xhc3M9XCJjYXB0aW9uXCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIG5hbWU9XCJ7e2Zvcm1OYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmlsZS1pbnB1dFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiaGludCB8fCAnRmlsZSBzZWxlY3Rpb24gZmllbGQnXCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZXNcIiAqbmdJZj1cIm11bHRpcGxlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2FjY2VwdF09XCJjaG9vc2VGaWx0ZXJcIiAoY2xpY2spPVwib25GaWxlRWxlbUNsaWNrKCRldmVudClcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsICRldmVudC50YXJnZXQuZmlsZXMpXCIgbXVsdGlwbGUgPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGNsYXNzPVwiYXBwLWFuY2hvclwiPnt7ZmlsZVVwbG9hZE1lc3NhZ2V9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBzaW5nbGUgZmlsZSB1cGxvYWQgaW4gd2ViIGFuZCBzaW5nbGUgLCBtdWx0aXBsZSBmaWxlIHVwbG9hZCBVSSBpbiBtb2JpbGUgcnVubW9kZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNpbmdsZS1maWxlLXVwbG9hZFwiICpuZ0lmPVwiIV9pc0NvcmRvdmEgJiYgKCFtdWx0aXBsZSB8fCBfaXNNb2JpbGVUeXBlKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIG5hbWU9XCJ7e2Zvcm1OYW1lfX1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHN1cHBvcnQgZm9yIGZpbGUgdXBsb2FkIGluIE1vYmlsZWFwcCBpbiBpdHMgcnVubW9kZSAoV2ViKSAtLT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWxlLWlucHV0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdGaWxlIHNlbGVjdGlvbiBmaWVsZCdcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlc1wiICpuZ0lmPVwibXVsdGlwbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbYWNjZXB0XT1cImNob29zZUZpbHRlclwiIChjbGljayk9XCJvbkZpbGVFbGVtQ2xpY2soJGV2ZW50KVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudCwgJGV2ZW50LnRhcmdldC5maWxlcylcIiBtdWx0aXBsZT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWxlLWlucHV0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdGaWxlIHNlbGVjdGlvbiBmaWVsZCdcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlc1wiICpuZ0lmPVwiIW11bHRpcGxlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2FjY2VwdF09XCJjaG9vc2VGaWx0ZXJcIiAoY2xpY2spPVwib25GaWxlRWxlbUNsaWNrKCRldmVudClcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsICRldmVudC50YXJnZXQuZmlsZXMpXCIgPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJkcm9wem9uZVwiIGZvY3VzLXRhcmdldCBjbGFzcz1cImFwcC1idXR0b24gYnRuIGJ0bi1kZWZhdWx0XCIgW25nQ2xhc3NdPVwieydoaWdobGlnaHQtZHJvcC1ib3gnIDogaGlnaGxpZ2h0RHJvcEFyZWF9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tpY29uY2xhc3N9fVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXB0aW9uXCIgW2lubmVySFRNTF09XCJjYXB0aW9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1maWxlcy11cGxvYWQtc3RhdHVzIHNpbmdsZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gc3VwcG9ydCBmb3IgZmlsZSB1cGxvYWQgaW4gTW9iaWxlIEFwcGxpY2F0aW9uIChkZXZpY2UpIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJfaXNDb3Jkb3ZhXCIgZm9jdXMtdGFyZ2V0IGNsYXNzPVwiYXBwLWJ1dHRvbiBidG4gYnRuLWRlZmF1bHRcIiAoY2xpY2spPVwib3BlbkZpbGVTZWxlY3RvcigpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgIDxpIGNsYXNzPVwie3tpY29uY2xhc3N9fVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXB0aW9uXCIgW2lubmVySFRNTF09XCJjYXB0aW9uXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gbGlzdCBvZiBzZWxlY3RlZGZpbGVzIFVJIC0tPlxuICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgZmlsZS11cGxvYWRcIiBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBmaWxlbGlzdGhlaWdodCwgb3ZlcmZsb3c6IG92ZXJmbG93fVwiICpuZ0lmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCIgPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmdCBvZiBzZWxlY3RlZEZpbGVzXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZmlsZS11cGxvYWQtc3RhdHVzXCIgKm5nSWY9XCJmdC5zdGF0dXMgIT09ICdhYm9ydCdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEgdXBsb2FkLWZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbGVmdCBtZWRpYS1taWRkbGUgZmlsZS1pY29uIHt7Z2V0RmlsZUV4dGVuc2lvbihmdC5uYW1lKSB8IGZpbGVJY29uQ2xhc3N9fVwiIHRpdGxlPVwie3tnZXRGaWxlRXh0ZW5zaW9uKGZ0Lm5hbWUpfX1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWJvZHkgbWVkaWEtbWlkZGxlIGZpbGUtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWRkZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidXBsb2FkLXRpdGxlXCI+e3tmdC5uYW1lfX08L2xhYmVsPjxici8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlc2l6ZVwiICpuZ0lmPVwiZnQuZmlsZUxlbmd0aCAgIT09IDBcIj57e2Z0LnNpemUgfCBmaWxlc2l6ZTowfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiAqbmdJZj1cImZ0LnN0YXR1cyA9PT0gJ29uUHJvZ3Jlc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBwcm9ncmVzcy1iYXItc3RyaXBlZCBwcm9ncmVzcy1iYXItaW5mb1wiIFtuZ1N0eWxlXT1cInt3aWR0aDogKGZ0LnByb2dyZXNzICsnJScpfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtcmlnaHQgbWVkaWEtbWlkZGxlXCIgKm5nSWY9XCJmdC5zdGF0dXMgPT09ICdvblByb2dyZXNzJyB8fCBmdC5zdGF0dXMgPT09ICdxdWV1ZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4tdHJhbnNwYXJlbnQgZmlsZS11cGxvYWQtc3RvcFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWJvcnRGaWxlVXBsb2FkKGZ0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwid2kgd2ktY2xvc2VcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1yaWdodCBtZWRpYS1taWRkbGVcIiAgKm5nSWY9XCJmdC5zdGF0dXMgPT09ICdzdWNjZXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaWNvbiB7e2Z0LnN0YXR1cyB8IHN0YXRlQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2xlYXJpY29uY2xhc3MgIT09ICcnICYmIGZ0LnN0YXR1cyAhPT0gJ29uUHJvZ3Jlc3MnXCIgY2xhc3M9XCJtZWRpYS1yaWdodCBtZWRpYS1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjbGVhcihmdClcIiBjbGFzcz1cImJ0biBidG4tdHJhbnNwYXJlbnQgYnRuLWRlZmF1bHQgc3RhdHVzLWljb25cIiB0aXRsZT1cInt7Y2xlYXJpY29uaGludH19XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwie3tjbGVhcmljb25jbGFzc319XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXJpZ2h0IG1lZGlhLW1pZGRsZVwiICAqbmdJZj1cImZ0LnN0YXR1cyA9PT0gJ2Vycm9yJ1wiIHRpdGxlPVwie3tmdC5lcnJNc2cgfHwgdGhpcy5hcHBMb2NhbGUuTUVTU0FHRV9GSUxFX1VQTE9BRF9GQUlMRUR9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaWNvbiB7e2Z0LnN0YXR1cyB8IHN0YXRlQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC91bD5cbiAgICA8IS0tIGxpc3Qgb2Ygc2VsZWN0ZWRmb2xkZXJzIFVJIHRvIHNob3cgdGhlIGVycm9yIGluIHRpdGxlIC0tPlxuICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgZmlsZS11cGxvYWRcIiBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBmaWxlbGlzdGhlaWdodCwgb3ZlcmZsb3c6IG92ZXJmbG93fVwiIHRpdGxlPVwie3t0aGlzLmFwcExvY2FsZS5NRVNTQUdFX0ZPTERFUl9VUExPQURTX05PVF9BTExPV0VEfX1cIiAqbmdJZj1cInNlbGVjdGVkRm9sZGVycy5sZW5ndGggPiAwXCIgPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGZ0IG9mIHNlbGVjdGVkRm9sZGVyc1wiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGZpbGUtdXBsb2FkLXN0YXR1c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhIHVwbG9hZC1maWxlLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbGVmdCBtZWRpYS1taWRkbGUgZmlsZS1pY29uIGZhIGZhLWZvbGRlci1vXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWJvZHkgbWVkaWEtbWlkZGxlIGZpbGUtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZGRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInVwbG9hZC10aXRsZVwiPnt7ZnQubmFtZX19PC9sYWJlbD48YnIvPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXJpZ2h0IG1lZGlhLW1pZGRsZVwiID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaWNvbiAgd2kgd2ktY2FuY2VsIHRleHQtZGFuZ2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbjwvZGl2PlxuIl19
|
|
606
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2ZpbGUtdXBsb2FkL3NyYy9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZmlsZS11cGxvYWQvc3JjL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFxQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7O0lDQTFDLGlDQUFzUTtJQUEvRCxBQUFsQyw2TEFBUyw4QkFBdUIsS0FBQyxrTEFBVyxnREFBeUMsS0FBQztJQUEzUCxpQkFBc1E7OztJQUF6SCxBQUF0QiwwQ0FBcUIsK0JBQXdCOzs7OztJQUxoTCxBQURKLDhCQUFzRSxhQUMwSDtJQUE3QixBQUF0QyxBQUFyRiw0S0FBUywwQkFBbUIsS0FBQywyS0FBb0UsOEJBQXVCLEtBQUUsbUtBQVMseUJBQWtCLEtBQUU7SUFDdkws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USxtQkFBbUIsd0ZBK1U0QixjQUFjLHdCQUE4QixrQkFBa0I7b0VBL1U3RyxtQkFBbUIsMEVBTGpCO2dCQUNQLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO2FBQzFDO1lDdkJMLDhCQUF3QztZQXVFcEMsQUFwQ0EsQUFMQSxBQWZBLEFBYkEscUVBQXNFLHdEQWFrQiw2REFlc0MscURBS0EscURBb0NnRTtZQWVsTSxpQkFBTTs7WUFwRmtDLGNBQWdDO1lBQWhDLHlEQUFnQztZQWEvQixjQUFpRDtZQUFqRCw4RUFBaUQ7WUFlN0UsY0FBZ0I7WUFBaEIscUNBQWdCO1lBS29FLGNBQThCO1lBQTlCLG1EQUE4QjtZQW9DZ0MsY0FBZ0M7WUFBaEMscURBQWdDOzs7aUZEN0NsTCxtQkFBbUI7Y0FSL0IsU0FBUzsyQkFDSSxnQkFBZ0IsYUFFZjtvQkFDUCxrQkFBa0IscUJBQXFCO2lCQUMxQzs7c0JBa1Y2QyxTQUFTO3VCQUFDLGNBQWM7O3NCQUF1QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTs7a0ZBL1V4SCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0FwcCwgRGF0YVNvdXJjZSwgZ2V0V21Qcm9qZWN0UHJvcGVydGllcywgaXNBdWRpb0ZpbGUsIGlzSW1hZ2VGaWxlLCBpc1ZpZGVvRmlsZX0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXJ9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZmlsZS11cGxvYWQucHJvcHMnO1xuaW1wb3J0IHtmb3JFYWNoLCBpbmNsdWRlcywgaXNFbXB0eSwgdG9Mb3dlcn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1maWxldXBsb2FkJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWZpbGV1cGxvYWQnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtRmlsZVVwbG9hZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihGaWxlVXBsb2FkQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBzZWxlY3RlZEZpbGVzOiBhbnkgPSBbXTtcbiAgICBzZWxlY3RlZEZvbGRlcnM6IGFueSA9IFtdO1xuICAgIHByb2dyZXNzT2JzZXJ2YWJsZTtcbiAgICBuYW1lO1xuICAgIGhpbnQ7XG4gICAgbXVsdGlwbGU7XG4gICAgZmlsZVRyYW5zZmVycyA9IHt9O1xuICAgIGNhcHRpb24gPSAnVXBsb2FkJztcbiAgICBmb3JtTmFtZSA9ICcnO1xuICAgIG1heGZpbGVzaXplO1xuICAgIGNsZWFyaWNvbmNsYXNzO1xuICAgIGNsZWFyaWNvbmhpbnQ7XG4gICAgc2VsZWN0ZWRVcGxvYWRUeXBlUGF0aDtcbiAgICBERUZBVUxUX0NBUFRJT05TID0ge1xuICAgICAgICBNVUxUSVBMRV9TRUxFQ1Q6ICdEcm9wIHlvdXIgZmlsZXMgaGVyZS4nLFxuICAgICAgICBTRUxFQ1Q6ICdTZWxlY3QnXG4gICAgfTtcbiAgICBERVZJQ0VfQ09OVEVOVFRZUEVTID0ge1xuICAgICAgICBJTUFHRTogJ2ltYWdlJyxcbiAgICAgICAgVklERU86ICd2aWRlbycsXG4gICAgICAgIEFVRElPOiAnYXVkaW8nLFxuICAgICAgICBGSUxFUzogJ2ZpbGVzJ1xuICAgIH07XG4gICAgRklMRVNJWkVfTUIgPSAxMDQ4NTc2O1xuICAgIHdpZGdldFByb3BzO1xuICAgIF9pc01vYmlsZVR5cGU7XG4gICAgX2lzQ29yZG92YTtcbiAgICAvLyBwYXJlbnRQcmVmYWJTY29wZSA9IGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wcmVmYWInKS5pc29sYXRlU2NvcGUoKSxcbiAgICBDT05TVEFOVF9GSUxFX1NFUlZJQ0UgPSAnRmlsZVNlcnZpY2UnO1xuICAgIHVwbG9hZERhdGEgPSB7XG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgdXBsb2FkUGF0aDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBhbGxvd2VkRmlsZVVwbG9hZEV4dGVuc2lvbnMgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuYWxsb3dlZEZpbGVVcGxvYWRFeHRlbnNpb25zO1xuICAgIGRlZmF1bHRBbGxvd2VkRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVVcGxvYWRFeHRlbnNpb25zLnNwbGl0KCcsJykubWFwKGl0ZW0gPT4gaXRlbS50cmltKCkpLm1hcChpdGVtID0+IGl0ZW0uZW5kc1dpdGgoJy8qJykgPyBpdGVtIDogYC4ke2l0ZW19YCk7XG4gICAgY2hvb3NlRmlsdGVyID0gdGhpcy5kZWZhdWx0QWxsb3dlZEV4dGVuc2lvbnMuaW5jbHVkZXMoJyovKicpID8gJycgOiB0aGlzLmRlZmF1bHRBbGxvd2VkRXh0ZW5zaW9ucztcbiAgICBkYXRhc291cmNlO1xuICAgIGZpbGVVcGxvYWRNZXNzYWdlID0gJ0Ryb3AgeW91ciBmaWxlcyBoZXJlIG9yIGNsaWNrIGhlcmUgdG8gYnJvd3NlJztcbiAgICB1cGxvYWRlZEZpbGVzID0ge1xuICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgIHBhdGg6ICcnLFxuICAgICAgICBsZW5ndGg6ICcnLFxuICAgICAgICBzdGF0dXM6ICcnXG4gICAgfTtcbiAgICBoaWdobGlnaHREcm9wQXJlYTtcbiAgICAvKl9oYXNPblN1Y2Nlc3NFdnQgPSBXTS5pc0RlZmluZWQoYXR0cnMub25TdWNjZXNzKTtcbiAgICAgX2hhc09uRXJyb3JFdnQgPSBXTS5pc0RlZmluZWQoYXR0cnMub25FcnJvcik7Ki9cblxuICAgIC8vIENoZWNraW5nIGlmIHRoZSBzZWxlY3RlZCBmaWxlIGlzIHZhbGlkIGZvciB0aGUgY2hvb3NlbiBmaWx0ZXIgdHlwZVxuICAgIGlzVmFsaWRGaWxlKGZpbGVuYW1lLCBjb250ZW50dHlwZSwgZXh0ZW5zaW9uTmFtZSwgaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkLCBjb250ZW50VHlwZXM7XG5cbiAgICAgICAgaWYgKCFjb250ZW50dHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudFR5cGVzID0gdG9Mb3dlcihjb250ZW50dHlwZSkuc3BsaXQoJywnKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXMoY29udGVudFR5cGVzLCAnaW1hZ2UvKicpIHx8IChpbmNsdWRlcyhjb250ZW50VHlwZXMsICdpbWFnZScpICYmIGlzTW9iaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBpc0ltYWdlRmlsZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGNvbnRlbnQgdHlwZSBjaG9zZW4gaXMgaW1hZ2UgYW5kIHVzZXIgdXBsb2FkcyBpbWFnZSBpdCBpcyB2YWxpZCBmaWxlXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmNsdWRlcyhjb250ZW50VHlwZXMsICdhdWRpby8qJykgfHwgKGluY2x1ZGVzKGNvbnRlbnRUeXBlcywgJ2F1ZGlvJykgJiYgaXNNb2JpbGVUeXBlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGlzQXVkaW9GaWxlKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgY29udGVudCB0eXBlIGNob3NlbiBpcyBhdWRpby8qIGFuZCB1c2VyIHVwbG9hZHMgYXVkaW8gaXQgaXMgdmFsaWQgZmlsZVxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZXMoY29udGVudFR5cGVzLCAndmlkZW8vKicpIHx8IChpbmNsdWRlcyhjb250ZW50VHlwZXMsICd2aWRlbycpICYmIGlzTW9iaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBpc1ZpZGVvRmlsZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGNvbnRlbnQgdHlwZSBjaG9zZW4gaXMgdmlkZW8vKiBhbmQgdXNlciB1cGxvYWRzIHZpZGVvIGl0IGlzIHZhbGlkIGZpbGVcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypjb250ZW50IHR5cGUgYW5kIHRoZSB1cGxvYWRlZCBmaWxlIGV4dGVuc2lvbiBzaG91bGQgYmUgc2FtZSovXG4gICAgICAgIGlmIChpbmNsdWRlcyhjb250ZW50VHlwZXMsICcuJyArIHRvTG93ZXIoZXh0ZW5zaW9uTmFtZSkpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG5cbiAgICAvKiB0aGlzIHJldHVybiB0aGUgYXJyYXkgb2YgZmlsZXMgd2hpY2ggYXJlIGhhdmluZyB0aGUgZmlsZSBzaXplIG5vdCBtb3JlIHRoYW4gbWF4ZmlsZXNpemUgYW5kIGZpbHRlcnMgYmFzZWQgb24gY29udGVudHR5cGUgKi9cbiAgICBnZXRWYWxpZEZpbGVzKCRmaWxlcykge1xuICAgICAgICBjb25zdCB2YWxpZEZpbGVzID0gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsZXMgPSBbXTtcbiAgICAgICAgY29uc3QgTUFYRklMRVVQTE9BRF9TSVpFID0gcGFyc2VGbG9hdCh0aGlzLm1heGZpbGVzaXplKSAqIHRoaXMuRklMRVNJWkVfTUIgfHwgdGhpcy5GSUxFU0laRV9NQjtcbiAgICAgICAgY29uc3QgTUFYX0ZJTEVfVVBMT0FEX0ZPUk1BVFRFRF9TSVpFID0gKHRoaXMubWF4ZmlsZXNpemUgfHwgJzEnKSArICdNQic7XG5cbiAgICAgICAgLy8gaWYgY29udGVudHR5cGUgaXMgZmlsZXMgZm9yIG1vYmlsZSBwcm9qZWN0cy5cbiAgICAgICAgaWYgKHRoaXMuY2hvb3NlRmlsdGVyID09PSB0aGlzLkRFVklDRV9DT05URU5UVFlQRVMuRklMRVMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hvb3NlRmlsdGVyID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKCRmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIC8qIGNoZWNrIGZvciB0aGUgZmlsZSBjb250ZW50IHR5cGUgYmVmb3JlIHVwbG9hZGluZyAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRGaWxlKGZpbGUubmFtZSwgdGhpcy5jaG9vc2VGaWx0ZXIsIHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlLm5hbWUpLCB0aGlzLl9pc01vYmlsZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfRklMRV9FWFRFTlRJT05fVkFMSURBVElPTl9NRVNTQUdFfSAke3RoaXMuY2hvb3NlRmlsdGVyfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvckZpbGVzKCdJTlZBTElEX0ZJTEVfRVhURU5TSU9OJywgbXNnLCBmaWxlLCBlcnJvckZpbGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYRklMRVVQTE9BRF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfRklMRV9FWENFRURfVkFMSURBVElPTl9NRVNTQUdFfSAke01BWF9GSUxFX1VQTE9BRF9GT1JNQVRURURfU0laRX1gO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JGaWxlcygnSU5WQUxJRF9GSUxFX1NJWkUnLCBtc2csIGZpbGUsIGVycm9yRmlsZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZEZpbGVzOiB2YWxpZEZpbGVzLFxuICAgICAgICAgICAgZXJyb3JGaWxlczogZXJyb3JGaWxlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yRmlsZXMoa2V5LCBtc2csIGZpbGUsIGVycm9yRmlsZXMpIHtcbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZXJyb3IgY2FsbGJhY2sgZXhpc3Qgb3Igbm90LiBJZiBpdCBleGlzdHMgdGhlbiBkb250IHNob3cgdGFvc3RlciBtZXNzYWdlXG4gICAgICAgIGlmICghdGhpcy5oYXNFdmVudENhbGxiYWNrKCdlcnJvcicpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAobXNnLCAnRXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbWVzc2FnZTogbXNnXG4gICAgICAgIH07XG4gICAgICAgIGZpbGUuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgZXJyb3JGaWxlcy5wdXNoKGZpbGUpO1xuICAgIH1cblxuICAgIC8qT3ZlcndyaXRlIHRoZSBjYXB0aW9uIG9ubHkgaWYgdGhleSBhcmUgZGVmYXVsdCovXG4gICAgZ2V0Q2FwdGlvbihjYXB0aW9uLCBpc011bHRpcGxlLCBpc01vYmlsZVR5cGUpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMuREVGQVVMVF9DQVBUSU9OUywgY2FwdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBpc011bHRpcGxlICYmICFpc01vYmlsZVR5cGUgPyB0aGlzLkRFRkFVTFRfQ0FQVElPTlMuTVVMVElQTEVfU0VMRUNUIDogdGhpcy5ERUZBVUxUX0NBUFRJT05TLlNFTEVDVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FwdGlvbjtcbiAgICB9XG5cbiAgICB1cGxvYWRVcmwgPSAnc2VydmljZXMnO1xuXG4gICAgLyogY2hhbmdlIHNlcnZlciBwYXRoIGJhc2VkIG9uIHVzZXIgb3B0aW9uICovXG4gICAgY2hhbmdlU2VydmVyVXBsb2FkUGF0aChwYXRoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRUeXBlUGF0aCA9IHBhdGg7XG4gICAgfVxuXG4gICAgLyogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaWxlZXh0ZW5zaW9uICovXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSkge1xuICAgICAgICBpZiAoZmlsZU5hbWUgJiYgaW5jbHVkZXMoZmlsZU5hbWUsICcuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZmlsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgc2VsZWN0IEV2ZW50XG4gICAgICogQHBhcmFtICRldmVudFxuICAgICAqIEBwYXJhbSAkZmlsZXNcbiAgICAgKi9cbiAgICBvblNlbGVjdEV2ZW50Q2FsbCgkZXZlbnQsICRmaWxlcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSAkZmlsZXM7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkLmV4dGVuZCgkZXZlbnQuJGZpbGVzIHx8IHt9LCAkZmlsZXMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsZXM6ICRmaWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsZUVsZW1DbGljaygkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHREcm9wQXJlYSA9IHRydWU7XG5cbiAgICAgICAgLy9UaGUgZmlsZSB1cGxvYWQgd2lkZ2V0IHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gbnVsbCB0byByZXVwbG9hZCB0aGUgc2FtZSBmaWxlLlxuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5maWxlLWlucHV0JylbMF0udmFsdWUgPSBudWxsO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgLy8gd2hlbiB0aGUgZmlsZXBpY2tlciBpcyBub3QgdGhlcmUgb24gdGhlIHdpbmRvdywgcmVtb3ZlIHRoZSBkcm9wem9uZSBoaWdobGlnaHRcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5kaXNhYmxlRHJvcFpvbmUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZURyb3Bab25lKCkge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodERyb3BBcmVhID0gZmFsc2U7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuZGlzYWJsZURyb3Bab25lKTtcbiAgICB9XG5cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHNwZWNpZmllZCBmaWxlLiBpZiBhcmd1bWVudCBpcyBub3QgcHJvdmlkZWQsIGl0IGNsZWFycyB0aGUgY29tcGxldGUgbGlzdCAgKi9cbiAgICBjbGVhcihmaWxlT2JqKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IChmaWxlT2JqKSA/IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IGZpbGUgIT09IGZpbGVPYmopIDogW107XG4gICAgfVxuXG4gICAgLyp0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgY2xhc3MgbmFtZXMgZm9yIGNsZWFyIGljb24gKi9cbiAgICBzZXRDbGVhckljb25DbGFzcyhjbGFzc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJpY29uY2xhc3MgPSBjbGFzc1ZhbHVlO1xuICAgIH1cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBoaW50IGZvciBjbGVhciBpY29uICovXG4gICAgc2V0Q2xlYXJJY29uSGludChoaW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJpY29uaGludCA9IGhpbnQ7XG4gICAgfVxuXG5cbiAgICAvKnRoaXMgZnVuY3Rpb24gdG8gYXBwZW5kIHVwbG9hZCBzdGF0dXMgZG9tIGVsZW1lbnRzIHRvIHdpZGdldCAqL1xuICAgIG9uRmlsZVNlbGVjdCgkZXZlbnQsICRmaWxlcykge1xuICAgICAgICBsZXQgYmVmb3JlU2VsZWN0VmFsO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZ2V0VmFsaWRGaWxlcygkZmlsZXMpO1xuICAgICAgICAkZmlsZXMgPSBmaWxlcy52YWxpZEZpbGVzO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IHRyaWVkIHVwbG9hZGluZyBmb2xkZXJzIHVzaW5nIGRyb3AsIGFuZCB0aGVuIHVwbG9hZGluZyB1c2luZyBjbGljayBtZXRob2Qgd2UgY2xlYXIgdGhlIGZvbGRlcnMgZG9tXG4gICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gXCJjaGFuZ2VcIikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlcnMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyaWdnZXIgZXJyb3IgY2FsbGJhY2sgZXZlbnQgaWYgYW55IGludmFsaWQgZmlsZSBmb3VuZC5cbiAgICAgICAgaWYgKCFpc0VtcHR5KGZpbGVzLmVycm9yRmlsZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMuZXJyb3JGaWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIGNhbGwgaWYgdGhlcmUgYXJlIHZhbGlkIGZpbGVzIGVsc2Ugbm8gY2FsbCBpcyBtYWRlXG4gICAgICAgIGlmICgkZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgICAgICAvLyBFVkVOVDogT05fQkVGT1JFX1NFTEVDVFxuICAgICAgICAgICAgYmVmb3JlU2VsZWN0VmFsID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkLmV4dGVuZCgkZXZlbnQuJGZpbGVzIHx8IHt9LCAkZmlsZXMpLFxuICAgICAgICAgICAgICAgIGZpbGVzOiAkZmlsZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5fcHJvZ3Jlc3NPYnNlcnZhYmxlID0gdGhpcy5wcm9ncmVzc09ic2VydmFibGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLl9wcm9ncmVzc09ic2VydmFibGUuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChwcm9ncmVzc09iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuc2VsZWN0ZWRGaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IHByb2dyZXNzT2JqLmZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IHByb2dyZXNzT2JqLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnByb2dyZXNzID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zdGF0dXMgPSBwcm9ncmVzc09iai5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc09iai5lcnJNc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZXJyTXNnID0gcHJvZ3Jlc3NPYmouZXJyTXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gJGZpbGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJlZm9yZVNlbGVjdFZhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBFVkVOVDogT05fU0VMRUNUXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEV2ZW50Q2FsbCgkZXZlbnQsICRmaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgKFByZXZlbnQgZmlsZSBmcm9tIGJlaW5nIG9wZW5lZClcbiAgICBkcmFnT3ZlckhhbmRsZXIoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBmaWxlIGRhdGEgaWYgaXQgZXhpc3RzIGFuZCBjYWxsIHRoZSBvbkZpbGVTZWxlY3QgZnVuY3Rpb25cbiAgICBvbkZpbGVEcm9wKCRldmVudCkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGxpc3RPZkZpbGVzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXJzID0gW107XG4gICAgICAgIGNvbnN0IGZpbGVzRGF0YSA9ICRldmVudC5kYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICAgIGlmIChmaWxlc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gVXNlIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGludGVyZmFjZSB0byBhY2Nlc3MgdGhlIGZpbGUocylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXNEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgdGhlIGZpbGVzIGFuZCBwdXNoIHRoZW0gaW50byBhbiBhcnJheVxuICAgICAgICAgICAgICAgIGlmIChmaWxlc0RhdGFbaV0ud2Via2l0R2V0QXNFbnRyeSgpLmlzRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0T2ZGaWxlcy5wdXNoKGZpbGVzRGF0YVtpXS5nZXRBc0ZpbGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIGEgc2VsZWN0ZWQgaXRlbSBpcyBkaXJlY3RvcnkgcHVzaCB0aGUgZm9sZGVyIGVsZW1lbnQgaW50byBhbiBhcnJheSBhbmQgZGlzcGxheSBlcnJvciBtZXNzYWdlIGJ5IGFkZGluZyB0byBkb21cbiAgICAgICAgICAgICAgICBlbHNlIGlmKGZpbGVzRGF0YVtpXS53ZWJraXRHZXRBc0VudHJ5KCkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlcnMucHVzaChmaWxlc0RhdGFbaV0uZ2V0QXNGaWxlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25GaWxlU2VsZWN0KCRldmVudCwgbGlzdE9mRmlsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ092ZXJDYihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJyNkcm9wem9uZScpLmFkZENsYXNzKCdoaWdobGlnaHQtZHJvcC1ib3gnKTtcbiAgICB9XG5cbiAgICBkcm9wQ2IoKSB7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcjZHJvcHpvbmUnKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWRyb3AtYm94Jyk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBmaWxlIHNlbGVjdCB3aW5kb3csIHdoZW4gY2xpY2tlZCBhbnl3aGVyZSBvbiB0aGUgZmlsZSB1cGxvYWQgd2lkZ2V0IGluIGNhc2Ugb2YgbXVsdGkgc2VsZWN0XG4gICAgdHJpZ2dlckZpbGVTZWxlY3QoKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmZpbGUtaW5wdXQnKS50cmlnZ2VyKCdjbGljaycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFib3J0cyBhIGZpbGUgdXBsb2FkIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gJGZpbGUsIHRoZSBmaWxlIGZvciB3aGljaCB0aGUgcmVxdWVzdCBpcyB0byBiZSBhYm9ydGVkXG4gICAgICovXG4gICAgYWJvcnRGaWxlVXBsb2FkKCRmaWxlKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkNBTkNFTCwgJGZpbGUpO1xuICAgIH1cblxuICAgIC8qIERlZmluZSB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgd2lkZ2V0IHByb3BlcnR5ICovXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdikge1xuICAgICAgICAvKk1vbml0b3JpbmcgY2hhbmdlcyBmb3Igc3R5bGVzIG9yIHByb3BlcnRpZXMgYW5kIGFjY29yZGluZ2x5IGhhbmRsaW5nIHJlc3BlY3RpdmUgY2hhbmdlcy4qL1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAndXBsb2FkcGF0aCc6XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTcmluaXZhczogd2h5IGRvIHdlIG5lZWQgdXBsb2FkcGF0aFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmVyVXBsb2FkUGF0aChudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjb250ZW50dHlwZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFsbG93ZWRFeHRlbnNpb25zLmluY2x1ZGVzKCcqLyonKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNob29zZUZpbHRlciA9IG52LnNwbGl0KCcgJykuam9pbignLCcpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG9vc2VGaWx0ZXIgPSB0aGlzLmRlZmF1bHRBbGxvd2VkRXh0ZW5zaW9ucy5maWx0ZXIoaXRlbSA9PiBudi5zcGxpdCgnICcpLmpvaW4oJywnKS5pbmNsdWRlcyhpdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHRoaXMuY2hvb3NlRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG9vc2VGaWx0ZXIgPSB0aGlzLmRlZmF1bHRBbGxvd2VkRXh0ZW5zaW9ucztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybU5hbWUgPSB0aGlzLm5hbWUgKyAodGhpcy5tdWx0aXBsZSA/ICctbXVsdGlwbGUtZmlsZXVwbG9hZCcgOiAnLXNpbmdsZS1maWxldXBsb2FkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uID0gdGhpcy5nZXRDYXB0aW9uKHRoaXMuY2FwdGlvbiwgdGhpcy5tdWx0aXBsZSwgdGhpcy5faXNNb2JpbGVUeXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGV1cGxvYWRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRNZXNzYWdlID0gbnY7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBwcml2YXRlIGFwcDogQXBwLCBAQXR0cmlidXRlKCdzZWxlY3QuZXZlbnQnKSBwdWJsaWMgb25TZWxlY3RFdnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIC8vIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICAvLyBhZGRpbmcsIGRyYWdvdmVyIGFuZCBkcm9wIG9uIHRoZSBkb2N1bWVudCBhcyB3aGVuIGZpbGUgaXMgZHJhZ2dlZCBvbiB0byB0aGUgcGFnZSBoaWdobGlnaHQgdGhlIGRyb3B6b25lcyBhbmQgcmVtb3ZlIGhpZ2hsaWdodCBvbiBmaWxlIGRyb3BcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmRyYWdPdmVyQ2IuYmluZCh0aGlzKSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLmRyb3BDYi5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyBhZGRpbmcgbW91c2VsZWF2ZSBldm50IHRvIHJlbW92ZSBoaWdobGlnaHQgd2hlbiBmaWxlIGlzIGRyb3BwZWQgb3V0c2lkZSB0aGUgd2luZG93XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmRyb3BDYi5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN0eWxlciggdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hcHAtYnV0dG9uLCAuZHJvcC1ib3gnKSwgdGhpcyk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5kcmFnT3ZlckNiKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuZHJvcENiKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuZHJvcENiKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXBwLWZpbGV1cGxvYWRcIiBpbml0LXdpZGdldD5cbiAgICA8IS0tIGRyYWcgYW5kIGRyb3AgZmlsZXMgVUkgaW4gd2ViIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtbXVsdGktZmlsZS11cGxvYWRcIiAqbmdJZj1cIiFfaXNNb2JpbGVUeXBlICYmIG11bHRpcGxlXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJkcm9wem9uZVwiIGNsYXNzPVwiZHJvcC1ib3hcIiAoY2xpY2spPVwidHJpZ2dlckZpbGVTZWxlY3QoKVwiIFtuZ0NsYXNzXT1cInsnaGlnaGxpZ2h0LWRyb3AtYm94JyA6IGhpZ2hsaWdodERyb3BBcmVhfVwiIChkcmFnb3Zlcik9XCJkcmFnT3ZlckhhbmRsZXIoJGV2ZW50KTtcIiAoZHJvcCk9XCJvbkZpbGVEcm9wKCRldmVudCk7XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInt7aWNvbmNsYXNzfX1cIj48L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbaW5uZXJIdG1sXT1cImNhcHRpb25cIiBjbGFzcz1cImNhcHRpb25cIj48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgbmFtZT1cInt7Zm9ybU5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWxlLWlucHV0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJoaW50IHx8ICdGaWxlIHNlbGVjdGlvbiBmaWVsZCdcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlc1wiICpuZ0lmPVwibXVsdGlwbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbYWNjZXB0XT1cImNob29zZUZpbHRlclwiIChjbGljayk9XCJvbkZpbGVFbGVtQ2xpY2soJGV2ZW50KVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudCwgJGV2ZW50LnRhcmdldC5maWxlcylcIiBtdWx0aXBsZSA+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgY2xhc3M9XCJhcHAtYW5jaG9yXCI+e3tmaWxlVXBsb2FkTWVzc2FnZX19PC9hPlxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIHNpbmdsZSBmaWxlIHVwbG9hZCBpbiB3ZWIgYW5kIHNpbmdsZSAsIG11bHRpcGxlIGZpbGUgdXBsb2FkIFVJIGluIG1vYmlsZSBydW5tb2RlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtc2luZ2xlLWZpbGUtdXBsb2FkXCIgKm5nSWY9XCIhX2lzQ29yZG92YSAmJiAoIW11bHRpcGxlIHx8IF9pc01vYmlsZVR5cGUpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgbmFtZT1cInt7Zm9ybU5hbWV9fVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gc3VwcG9ydCBmb3IgZmlsZSB1cGxvYWQgaW4gTW9iaWxlYXBwIGluIGl0cyBydW5tb2RlIChXZWIpIC0tPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZpbGUtaW5wdXRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImhpbnQgfHwgJ0ZpbGUgc2VsZWN0aW9uIGZpZWxkJ1wiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVzXCIgKm5nSWY9XCJtdWx0aXBsZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFthY2NlcHRdPVwiY2hvb3NlRmlsdGVyXCIgKGNsaWNrKT1cIm9uRmlsZUVsZW1DbGljaygkZXZlbnQpXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50LCAkZXZlbnQudGFyZ2V0LmZpbGVzKVwiIG11bHRpcGxlPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZpbGUtaW5wdXRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImhpbnQgfHwgJ0ZpbGUgc2VsZWN0aW9uIGZpZWxkJ1wiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVzXCIgKm5nSWY9XCIhbXVsdGlwbGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbYWNjZXB0XT1cImNob29zZUZpbHRlclwiIChjbGljayk9XCJvbkZpbGVFbGVtQ2xpY2soJGV2ZW50KVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudCwgJGV2ZW50LnRhcmdldC5maWxlcylcIiA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImRyb3B6b25lXCIgZm9jdXMtdGFyZ2V0IGNsYXNzPVwiYXBwLWJ1dHRvbiBidG4gYnRuLWRlZmF1bHRcIiBbbmdDbGFzc109XCJ7J2hpZ2hsaWdodC1kcm9wLWJveCcgOiBoaWdobGlnaHREcm9wQXJlYX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2ljb25jbGFzc319XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcHRpb25cIiBbaW5uZXJIVE1MXT1cImNhcHRpb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWZpbGVzLXVwbG9hZC1zdGF0dXMgc2luZ2xlXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBzdXBwb3J0IGZvciBmaWxlIHVwbG9hZCBpbiBNb2JpbGUgQXBwbGljYXRpb24gKGRldmljZSkgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIl9pc0NvcmRvdmFcIiBmb2N1cy10YXJnZXQgY2xhc3M9XCJhcHAtYnV0dG9uIGJ0biBidG4tZGVmYXVsdFwiIChjbGljayk9XCJvcGVuRmlsZVNlbGVjdG9yKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJ7e2ljb25jbGFzc319XCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhcHRpb25cIiBbaW5uZXJIVE1MXT1cImNhcHRpb25cIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLSBsaXN0IG9mIHNlbGVjdGVkZmlsZXMgVUkgLS0+XG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBmaWxlLXVwbG9hZFwiIFtuZ1N0eWxlXT1cIntoZWlnaHQ6IGZpbGVsaXN0aGVpZ2h0LCBvdmVyZmxvdzogb3ZlcmZsb3d9XCIgKm5nSWY9XCJzZWxlY3RlZEZpbGVzLmxlbmd0aCA+IDBcIiA+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZ0IG9mIHNlbGVjdGVkRmlsZXNcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBmaWxlLXVwbG9hZC1zdGF0dXNcIiAqbmdJZj1cImZ0LnN0YXR1cyAhPT0gJ2Fib3J0J1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYSB1cGxvYWQtZmlsZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1sZWZ0IG1lZGlhLW1pZGRsZSBmaWxlLWljb24ge3tnZXRGaWxlRXh0ZW5zaW9uKGZ0Lm5hbWUpIHwgZmlsZUljb25DbGFzc319XCIgdGl0bGU9XCJ7e2dldEZpbGVFeHRlbnNpb24oZnQubmFtZSl9fVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtYm9keSBtZWRpYS1taWRkbGUgZmlsZS1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZGRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ1cGxvYWQtdGl0bGVcIj57e2Z0Lm5hbWV9fTwvbGFiZWw+PGJyLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGVzaXplXCIgKm5nSWY9XCJmdC5maWxlTGVuZ3RoICAhPT0gMFwiPnt7ZnQuc2l6ZSB8IGZpbGVzaXplOjB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiICpuZ0lmPVwiZnQuc3RhdHVzID09PSAnb25Qcm9ncmVzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdHJpcGVkIHByb2dyZXNzLWJhci1pbmZvXCIgW25nU3R5bGVdPVwie3dpZHRoOiAoZnQucHJvZ3Jlc3MgKyclJyl9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1yaWdodCBtZWRpYS1taWRkbGVcIiAqbmdJZj1cImZ0LnN0YXR1cyA9PT0gJ29uUHJvZ3Jlc3MnIHx8IGZ0LnN0YXR1cyA9PT0gJ3F1ZXVlZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi10cmFuc3BhcmVudCBmaWxlLXVwbG9hZC1zdG9wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhYm9ydEZpbGVVcGxvYWQoZnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3aSB3aS1jbG9zZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXJpZ2h0IG1lZGlhLW1pZGRsZVwiICAqbmdJZj1cImZ0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pY29uIHt7ZnQuc3RhdHVzIHwgc3RhdGVDbGFzcyB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjbGVhcmljb25jbGFzcyAhPT0gJycgJiYgZnQuc3RhdHVzICE9PSAnb25Qcm9ncmVzcydcIiBjbGFzcz1cIm1lZGlhLXJpZ2h0IG1lZGlhLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNsZWFyKGZ0KVwiIGNsYXNzPVwiYnRuIGJ0bi10cmFuc3BhcmVudCBidG4tZGVmYXVsdCBzdGF0dXMtaWNvblwiIHRpdGxlPVwie3tjbGVhcmljb25oaW50fX1cIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2NsZWFyaWNvbmNsYXNzfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtcmlnaHQgbWVkaWEtbWlkZGxlXCIgICpuZ0lmPVwiZnQuc3RhdHVzID09PSAnZXJyb3InXCIgdGl0bGU9XCJ7e2Z0LmVyck1zZyB8fCB0aGlzLmFwcExvY2FsZS5NRVNTQUdFX0ZJTEVfVVBMT0FEX0ZBSUxFRH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pY29uIHt7ZnQuc3RhdHVzIHwgc3RhdGVDbGFzcyB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3VsPlxuICAgIDwhLS0gbGlzdCBvZiBzZWxlY3RlZGZvbGRlcnMgVUkgdG8gc2hvdyB0aGUgZXJyb3IgaW4gdGl0bGUgLS0+XG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBmaWxlLXVwbG9hZFwiIFtuZ1N0eWxlXT1cIntoZWlnaHQ6IGZpbGVsaXN0aGVpZ2h0LCBvdmVyZmxvdzogb3ZlcmZsb3d9XCIgdGl0bGU9XCJ7e3RoaXMuYXBwTG9jYWxlLk1FU1NBR0VfRk9MREVSX1VQTE9BRFNfTk9UX0FMTE9XRUR9fVwiICpuZ0lmPVwic2VsZWN0ZWRGb2xkZXJzLmxlbmd0aCA+IDBcIiA+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZnQgb2Ygc2VsZWN0ZWRGb2xkZXJzXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZmlsZS11cGxvYWQtc3RhdHVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEgdXBsb2FkLWZpbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1sZWZ0IG1lZGlhLW1pZGRsZSBmaWxlLWljb24gZmEgZmEtZm9sZGVyLW9cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtYm9keSBtZWRpYS1taWRkbGUgZmlsZS1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidXBsb2FkLXRpdGxlXCI+e3tmdC5uYW1lfX08L2xhYmVsPjxici8+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtcmlnaHQgbWVkaWEtbWlkZGxlXCIgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pY29uICB3aSB3aS1jYW5jZWwgdGV4dC1kYW5nZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuPC9kaXY+XG4iXX0=
|
|
@@ -6,7 +6,7 @@ import * as i3 from '@wm/components/base';
|
|
|
6
6
|
import { PROP_STRING, PROP_NUMBER, PROP_BOOLEAN, register, registerFormWidget, StylableComponent, styler, provideAsWidgetRef, WmComponentsModule } from '@wm/components/base';
|
|
7
7
|
import { Subject } from 'rxjs';
|
|
8
8
|
import * as i1 from '@wm/core';
|
|
9
|
-
import { FormWidgetType, isImageFile, isAudioFile, isVideoFile, DataSource } from '@wm/core';
|
|
9
|
+
import { FormWidgetType, isImageFile, isAudioFile, isVideoFile, DataSource, getWmProjectProperties } from '@wm/core';
|
|
10
10
|
import { toLower, includes, forEach, isEmpty } from 'lodash-es';
|
|
11
11
|
|
|
12
12
|
const registerProps = () => {
|
|
@@ -525,7 +525,15 @@ class FileUploadComponent extends StylableComponent {
|
|
|
525
525
|
this.changeServerUploadPath(nv);
|
|
526
526
|
break;
|
|
527
527
|
case 'contenttype':
|
|
528
|
-
this.
|
|
528
|
+
if (this.defaultAllowedExtensions.includes('*/*')) {
|
|
529
|
+
this.chooseFilter = nv.split(' ').join(',');
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
this.chooseFilter = this.defaultAllowedExtensions.filter(item => nv.split(' ').join(',').includes(item));
|
|
533
|
+
if (isEmpty(this.chooseFilter)) {
|
|
534
|
+
this.chooseFilter = this.defaultAllowedExtensions;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
529
537
|
break;
|
|
530
538
|
case 'multiple':
|
|
531
539
|
this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');
|
|
@@ -562,7 +570,9 @@ class FileUploadComponent extends StylableComponent {
|
|
|
562
570
|
file: undefined,
|
|
563
571
|
uploadPath: undefined
|
|
564
572
|
};
|
|
565
|
-
this.
|
|
573
|
+
this.allowedFileUploadExtensions = getWmProjectProperties().allowedFileUploadExtensions;
|
|
574
|
+
this.defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);
|
|
575
|
+
this.chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;
|
|
566
576
|
this.fileUploadMessage = 'Drop your files here or click here to browse';
|
|
567
577
|
this.uploadedFiles = {
|
|
568
578
|
fileName: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/file-upload/src/file-upload.props.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.module.ts","../../../../../projects/components/widgets/input/file-upload/src/index.ts"],"sourcesContent":["import { PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget } from '@wm/components/base';\nimport { FormWidgetType } from '@wm/core';\n\nexport const registerProps = () => {\n register(\n 'wm-fileupload',\n new Map(\n [\n ['caption', PROP_STRING],\n ['name', PROP_STRING],\n ['tabindex', PROP_NUMBER],\n ['multiple', PROP_BOOLEAN],\n ['fileuploadmessage' , PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['disabled', PROP_BOOLEAN],\n ['contenttype', PROP_STRING],\n ['maxfilesize', PROP_NUMBER],\n ['iconclass', {value: 'wm-sl-l sl-cloud-upload', ...PROP_STRING}],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconhint', {value: 'Clear', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['uploadpath', {...PROP_STRING}],\n ['datasource', PROP_STRING],\n ['selectedFiles', PROP_STRING],\n ['destination', PROP_STRING],\n ['filelistheight', PROP_NUMBER],\n ]\n )\n );\n registerFormWidget(\n FormWidgetType.UPLOAD,\n new Map([\n ['disabled', PROP_BOOLEAN],\n ['extensions', PROP_STRING],\n ['filetype', PROP_STRING],\n ['multiple', PROP_BOOLEAN],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN]\n ])\n );\n};\n","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n <div class=\"app-multi-file-upload\" *ngIf=\"!_isMobileType && multiple\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <i class=\"{{iconclass}}\"></i>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"caption\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n <a href=\"javascript:void(0);\" class=\"app-anchor\">{{fileUploadMessage}}</a>\n </form>\n </div>\n </div>\n </div>\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n <div class=\"app-single-file-upload\" *ngIf=\"!_isCordova && (!multiple || _isMobileType)\">\n <div class=\"app-button-wrapper\">\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <!-- support for file upload in Mobileapp in its runmode (Web) -->\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple>\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"!multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" >\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <i class=\"{{iconclass}}\" aria-hidden=\"true\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n </form>\n </div>\n <div class=\"app-files-upload-status single\"></div>\n </div>\n <!-- support for file upload in Mobile Application (device) -->\n <button *ngIf=\"_isCordova\" focus-target class=\"app-button btn btn-default\" (click)=\"openFileSelector()\" [disabled]=\"disabled\">\n <i class=\"{{iconclass}}\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n <!-- list of selectedfiles UI -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" *ngIf=\"selectedFiles.length > 0\" >\n <div *ngFor=\"let ft of selectedFiles\">\n <li class=\"list-group-item file-upload-status\" *ngIf=\"ft.status !== 'abort'\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon {{getFileExtension(ft.name) | fileIconClass}}\" title=\"{{getFileExtension(ft.name)}}\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n <span class=\"filesize\" *ngIf=\"ft.fileLength !== 0\">{{ft.size | filesize:0}}</span>\n </p>\n <div class=\"progress\" *ngIf=\"ft.status === 'onProgress'\">\n <div class=\"progress-bar progress-bar-striped progress-bar-info\" [ngStyle]=\"{width: (ft.progress +'%')}\"></div>\n </div>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'onProgress' || ft.status === 'queued'\">\n <a class=\"btn btn-transparent file-upload-stop\" type=\"button\" (click)=\"abortFileUpload(ft)\">\n <i class=\"wi wi-close\"></i>\n </a>\n </div>\n\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'success'\">\n <span class=\"status-icon {{ft.status | stateClass }}\"></span>\n </div>\n <div *ngIf=\"cleariconclass !== '' && ft.status !== 'onProgress'\" class=\"media-right media-middle\">\n <a (click)=\"clear(ft)\" class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <i class=\"{{cleariconclass}}\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'error'\" title=\"{{ft.errMsg || this.appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\">\n <span class=\"status-icon {{ft.status | stateClass }}\"></span>\n </div>\n </div>\n </li>\n </div>\n </ul>\n <!-- list of selectedfolders UI to show the error in title -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{this.appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" *ngIf=\"selectedFolders.length > 0\" >\n <li *ngFor=\"let ft of selectedFolders\" class=\"list-group-item file-upload-status\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon fa fa-folder-o\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n </p>\n </div>\n <div class=\"media-right media-middle\" >\n <span class=\"status-icon wi wi-cancel text-danger\"></span>\n </div>\n </div>\n </li>\n </ul>\n</div>\n","import {AfterViewInit, Attribute, Component, Injector, OnInit, OnDestroy, Optional, Inject} from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport {App, DataSource, isAudioFile, isImageFile, isVideoFile} from '@wm/core';\nimport { provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';\n\nimport { registerProps } from './file-upload.props';\nimport {forEach, includes, isEmpty, toLower} from \"lodash-es\";\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-fileupload';\nconst WIDGET_CONFIG = {\n widgetType: 'wm-fileupload',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: '[wmFileUpload]',\n templateUrl: './file-upload.component.html',\n providers: [\n provideAsWidgetRef(FileUploadComponent)\n ]\n})\n\nexport class FileUploadComponent extends StylableComponent implements OnInit, AfterViewInit, OnDestroy {\n static initializeProps = registerProps();\n selectedFiles: any = [];\n selectedFolders: any = [];\n progressObservable;\n name;\n hint;\n multiple;\n fileTransfers = {};\n caption = 'Upload';\n formName = '';\n maxfilesize;\n cleariconclass;\n cleariconhint;\n selectedUploadTypePath;\n DEFAULT_CAPTIONS = {\n MULTIPLE_SELECT: 'Drop your files here.',\n SELECT: 'Select'\n };\n DEVICE_CONTENTTYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n AUDIO: 'audio',\n FILES: 'files'\n };\n FILESIZE_MB = 1048576;\n widgetProps;\n _isMobileType;\n _isCordova;\n // parentPrefabScope = element.closest('.app-prefab').isolateScope(),\n CONSTANT_FILE_SERVICE = 'FileService';\n uploadData = {\n file: undefined,\n uploadPath: undefined\n };\n chooseFilter = '';\n datasource;\n fileUploadMessage = 'Drop your files here or click here to browse';\n uploadedFiles = {\n fileName: '',\n path: '',\n length: '',\n status: ''\n };\n highlightDropArea;\n /*_hasOnSuccessEvt = WM.isDefined(attrs.onSuccess);\n _hasOnErrorEvt = WM.isDefined(attrs.onError);*/\n\n // Checking if the selected file is valid for the choosen filter type\n isValidFile(filename, contenttype, extensionName, isMobileType) {\n let isValid, contentTypes;\n\n if (!contenttype) {\n return true;\n }\n contentTypes = toLower(contenttype).split(',');\n\n if (includes(contentTypes, 'image/*') || (includes(contentTypes, 'image') && isMobileType)) {\n isValid = isImageFile(filename);\n // If one of the content type chosen is image and user uploads image it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'audio/*') || (includes(contentTypes, 'audio') && isMobileType)) {\n isValid = isAudioFile(filename);\n // If one of the content type chosen is audio/* and user uploads audio it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'video/*') || (includes(contentTypes, 'video') && isMobileType)) {\n isValid = isVideoFile(filename);\n // If one of the content type chosen is video/* and user uploads video it is valid file\n if (isValid) {\n return isValid;\n }\n }\n /*content type and the uploaded file extension should be same*/\n if (includes(contentTypes, '.' + toLower(extensionName))) {\n isValid = true;\n }\n return isValid;\n }\n\n /* this return the array of files which are having the file size not more than maxfilesize and filters based on contenttype */\n getValidFiles($files) {\n const validFiles = [];\n const errorFiles = [];\n const MAXFILEUPLOAD_SIZE = parseFloat(this.maxfilesize) * this.FILESIZE_MB || this.FILESIZE_MB;\n const MAX_FILE_UPLOAD_FORMATTED_SIZE = (this.maxfilesize || '1') + 'MB';\n\n // if contenttype is files for mobile projects.\n if (this.chooseFilter === this.DEVICE_CONTENTTYPES.FILES) {\n this.chooseFilter = '';\n }\n\n forEach($files, (file) => {\n /* check for the file content type before uploading */\n if (!this.isValidFile(file.name, this.chooseFilter, this.getFileExtension(file.name), this._isMobileType)) {\n const msg = `${this.appLocale.LABEL_FILE_EXTENTION_VALIDATION_MESSAGE} ${this.chooseFilter}`;\n this.handleErrorFiles('INVALID_FILE_EXTENSION', msg, file, errorFiles);\n return;\n }\n if (file.size > MAXFILEUPLOAD_SIZE) {\n const msg = `${this.appLocale.LABEL_FILE_EXCEED_VALIDATION_MESSAGE} ${MAX_FILE_UPLOAD_FORMATTED_SIZE}`;\n this.handleErrorFiles('INVALID_FILE_SIZE', msg, file, errorFiles);\n return;\n }\n validFiles.push(file);\n });\n return {\n validFiles: validFiles,\n errorFiles: errorFiles\n };\n }\n\n handleErrorFiles(key, msg, file, errorFiles) {\n // Check whether the error callback exist or not. If it exists then dont show taoster message\n if (!this.hasEventCallback('error')) {\n this.app.notifyApp(msg, 'Error');\n }\n const error = {\n key: key,\n message: msg\n };\n file.error = error;\n errorFiles.push(file);\n }\n\n /*Overwrite the caption only if they are default*/\n getCaption(caption, isMultiple, isMobileType) {\n if (includes(this.DEFAULT_CAPTIONS, caption)) {\n return isMultiple && !isMobileType ? this.DEFAULT_CAPTIONS.MULTIPLE_SELECT : this.DEFAULT_CAPTIONS.SELECT;\n }\n return caption;\n }\n\n uploadUrl = 'services';\n\n /* change server path based on user option */\n changeServerUploadPath(path) {\n this.selectedUploadTypePath = path;\n }\n\n /* this function returns the fileextension */\n getFileExtension(fileName) {\n if (fileName && includes(fileName, '.')) {\n return fileName.substring(fileName.lastIndexOf('.') + 1);\n }\n return 'file';\n }\n\n /**\n * Calls select Event\n * @param $event\n * @param $files\n */\n onSelectEventCall($event, $files) {\n this.selectedFiles = $files;\n setTimeout(() => {\n this.invokeEventCallback('select', {\n $event: $.extend($event.$files || {}, $files),\n selectedFiles: $files\n });\n });\n }\n\n onFileElemClick($event) {\n this.highlightDropArea = true;\n\n //The file upload widget value should be set to null to reupload the same file.\n this.$element.find('.file-input')[0].value = null;\n $event.stopPropagation();\n\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.disableDropZone.bind(this));\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n window.removeEventListener('focus', this.disableDropZone);\n }\n\n /*this function to clear the specified file. if argument is not provided, it clears the complete list */\n clear(fileObj) {\n this.selectedFiles = (fileObj) ? this.selectedFiles.filter((file) => file !== fileObj) : [];\n }\n\n /*this function to set the class names for clear icon */\n setClearIconClass(classValue) {\n this.cleariconclass = classValue;\n }\n /*this function to set the hint for clear icon */\n setClearIconHint(hint) {\n this.cleariconhint = hint;\n }\n\n\n /*this function to append upload status dom elements to widget */\n onFileSelect($event, $files) {\n let beforeSelectVal;\n const files = this.getValidFiles($files);\n $files = files.validFiles;\n\n // If the user has previously tried uploading folders using drop, and then uploading using click method we clear the folders dom\n if ($event.type === \"change\") {\n this.selectedFolders = [];\n }\n\n // Trigger error callback event if any invalid file found.\n if (!isEmpty(files.errorFiles)) {\n this.invokeEventCallback('error', {\n $event,\n files: files.errorFiles\n });\n }\n\n // Make call if there are valid files else no call is made\n if ($files.length) {\n this.progressObservable = new Subject();\n // EVENT: ON_BEFORE_SELECT\n beforeSelectVal = this.invokeEventCallback('beforeselect', {\n $event: $.extend($event.$files || {}, $files),\n files: $files\n });\n if (this.datasource) {\n this.datasource._progressObservable = this.progressObservable;\n this.datasource._progressObservable.asObservable().subscribe((progressObj) => {\n forEach(this.selectedFiles, (file) => {\n if (file.name === progressObj.fileName) {\n file.progress = progressObj.progress;\n if (file.progress === 100) {\n file.status = 'success';\n } else {\n file.status = progressObj.status;\n if (progressObj.errMsg) {\n file.errMsg = progressObj.errMsg;\n }\n }\n }\n });\n });\n } else {\n this.selectedFiles = $files;\n }\n if (beforeSelectVal !== false) {\n // EVENT: ON_SELECT\n this.onSelectEventCall($event, $files);\n }\n }\n }\n\n // Prevent default behavior (Prevent file from being opened)\n dragOverHandler($event) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n // Get the file data if it exists and call the onFileSelect function\n onFileDrop($event) {\n $event.preventDefault();\n let listOfFiles = [];\n this.selectedFolders = [];\n const filesData = $event.dataTransfer.items;\n if (filesData.length > 0) {\n // Use DataTransferItemList interface to access the file(s)\n for (var i = 0; i < filesData.length; i++) {\n // Get all the files and push them into an array\n if (filesData[i].webkitGetAsEntry().isFile) {\n listOfFiles.push(filesData[i].getAsFile());\n }\n // If a selected item is directory push the folder element into an array and display error message by adding to dom\n else if(filesData[i].webkitGetAsEntry().isDirectory) {\n this.selectedFolders.push(filesData[i].getAsFile());\n }\n }\n this.onFileSelect($event, listOfFiles);\n }\n }\n\n dragOverCb(e) {\n e.preventDefault();\n $(this.nativeElement).find('#dropzone').addClass('highlight-drop-box');\n }\n\n dropCb() {\n $(this.nativeElement).find('#dropzone').removeClass('highlight-drop-box');\n }\n\n // this function triggers file select window, when clicked anywhere on the file upload widget in case of multi select\n triggerFileSelect() {\n this.$element.find('.file-input').trigger('click');\n }\n\n /**\n * Aborts a file upload request\n * @param $file, the file for which the request is to be aborted\n */\n abortFileUpload($file) {\n this.datasource.execute(DataSource.Operation.CANCEL, $file);\n }\n\n /* Define the property change handler. This function will be triggered when there is a change in the widget property */\n onPropertyChange(key, nv, ov) {\n /*Monitoring changes for styles or properties and accordingly handling respective changes.*/\n switch (key) {\n case 'uploadpath':\n // TODO Srinivas: why do we need uploadpath\n this.changeServerUploadPath(nv);\n break;\n case 'contenttype':\n this.chooseFilter = nv.split(' ').join(',');\n break;\n case 'multiple':\n this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');\n this.caption = this.getCaption(this.caption, this.multiple, this._isMobileType);\n break;\n case 'fileuploadmessage':\n this.fileUploadMessage = nv;\n }\n\n super.onPropertyChange(key, nv, ov);\n }\n\n constructor(inj: Injector, private app: App, @Attribute('select.event') public onSelectEvt, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n // styler(this.nativeElement, this);\n }\n\n ngOnInit() {\n super.ngOnInit();\n // adding, dragover and drop on the document as when file is dragged on to the page highlight the dropzones and remove highlight on file drop\n document.addEventListener('dragover', this.dragOverCb.bind(this));\n document.addEventListener('drop', this.dropCb.bind(this));\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.dropCb.bind(this));\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n document.removeEventListener('dragover', this.dragOverCb);\n document.removeEventListener('drop', this.dropCb);\n document.removeEventListener('mouseleave', this.dropCb);\n super.ngOnDestroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { FileUploadComponent } from './file-upload.component';\n\nconst components = [\n FileUploadComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class FileUploadModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/file-upload/src/file-upload.props.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.module.ts","../../../../../projects/components/widgets/input/file-upload/src/index.ts"],"sourcesContent":["import { PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget } from '@wm/components/base';\nimport { FormWidgetType } from '@wm/core';\n\nexport const registerProps = () => {\n register(\n 'wm-fileupload',\n new Map(\n [\n ['caption', PROP_STRING],\n ['name', PROP_STRING],\n ['tabindex', PROP_NUMBER],\n ['multiple', PROP_BOOLEAN],\n ['fileuploadmessage' , PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['disabled', PROP_BOOLEAN],\n ['contenttype', PROP_STRING],\n ['maxfilesize', PROP_NUMBER],\n ['iconclass', {value: 'wm-sl-l sl-cloud-upload', ...PROP_STRING}],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconhint', {value: 'Clear', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['uploadpath', {...PROP_STRING}],\n ['datasource', PROP_STRING],\n ['selectedFiles', PROP_STRING],\n ['destination', PROP_STRING],\n ['filelistheight', PROP_NUMBER],\n ]\n )\n );\n registerFormWidget(\n FormWidgetType.UPLOAD,\n new Map([\n ['disabled', PROP_BOOLEAN],\n ['extensions', PROP_STRING],\n ['filetype', PROP_STRING],\n ['multiple', PROP_BOOLEAN],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN]\n ])\n );\n};\n","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n <div class=\"app-multi-file-upload\" *ngIf=\"!_isMobileType && multiple\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <i class=\"{{iconclass}}\"></i>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"caption\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n <a href=\"javascript:void(0);\" class=\"app-anchor\">{{fileUploadMessage}}</a>\n </form>\n </div>\n </div>\n </div>\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n <div class=\"app-single-file-upload\" *ngIf=\"!_isCordova && (!multiple || _isMobileType)\">\n <div class=\"app-button-wrapper\">\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <!-- support for file upload in Mobileapp in its runmode (Web) -->\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple>\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"!multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" >\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <i class=\"{{iconclass}}\" aria-hidden=\"true\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n </form>\n </div>\n <div class=\"app-files-upload-status single\"></div>\n </div>\n <!-- support for file upload in Mobile Application (device) -->\n <button *ngIf=\"_isCordova\" focus-target class=\"app-button btn btn-default\" (click)=\"openFileSelector()\" [disabled]=\"disabled\">\n <i class=\"{{iconclass}}\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n <!-- list of selectedfiles UI -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" *ngIf=\"selectedFiles.length > 0\" >\n <div *ngFor=\"let ft of selectedFiles\">\n <li class=\"list-group-item file-upload-status\" *ngIf=\"ft.status !== 'abort'\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon {{getFileExtension(ft.name) | fileIconClass}}\" title=\"{{getFileExtension(ft.name)}}\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n <span class=\"filesize\" *ngIf=\"ft.fileLength !== 0\">{{ft.size | filesize:0}}</span>\n </p>\n <div class=\"progress\" *ngIf=\"ft.status === 'onProgress'\">\n <div class=\"progress-bar progress-bar-striped progress-bar-info\" [ngStyle]=\"{width: (ft.progress +'%')}\"></div>\n </div>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'onProgress' || ft.status === 'queued'\">\n <a class=\"btn btn-transparent file-upload-stop\" type=\"button\" (click)=\"abortFileUpload(ft)\">\n <i class=\"wi wi-close\"></i>\n </a>\n </div>\n\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'success'\">\n <span class=\"status-icon {{ft.status | stateClass }}\"></span>\n </div>\n <div *ngIf=\"cleariconclass !== '' && ft.status !== 'onProgress'\" class=\"media-right media-middle\">\n <a (click)=\"clear(ft)\" class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <i class=\"{{cleariconclass}}\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'error'\" title=\"{{ft.errMsg || this.appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\">\n <span class=\"status-icon {{ft.status | stateClass }}\"></span>\n </div>\n </div>\n </li>\n </div>\n </ul>\n <!-- list of selectedfolders UI to show the error in title -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{this.appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" *ngIf=\"selectedFolders.length > 0\" >\n <li *ngFor=\"let ft of selectedFolders\" class=\"list-group-item file-upload-status\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon fa fa-folder-o\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n </p>\n </div>\n <div class=\"media-right media-middle\" >\n <span class=\"status-icon wi wi-cancel text-danger\"></span>\n </div>\n </div>\n </li>\n </ul>\n</div>\n","import {AfterViewInit, Attribute, Component, Inject, Injector, OnDestroy, OnInit, Optional} from '@angular/core';\n\nimport {Subject} from 'rxjs';\n\nimport {App, DataSource, getWmProjectProperties, isAudioFile, isImageFile, isVideoFile} from '@wm/core';\nimport {provideAsWidgetRef, StylableComponent, styler} from '@wm/components/base';\n\nimport {registerProps} from './file-upload.props';\nimport {forEach, includes, isEmpty, toLower} from \"lodash-es\";\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-fileupload';\nconst WIDGET_CONFIG = {\n widgetType: 'wm-fileupload',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: '[wmFileUpload]',\n templateUrl: './file-upload.component.html',\n providers: [\n provideAsWidgetRef(FileUploadComponent)\n ]\n})\n\nexport class FileUploadComponent extends StylableComponent implements OnInit, AfterViewInit, OnDestroy {\n static initializeProps = registerProps();\n selectedFiles: any = [];\n selectedFolders: any = [];\n progressObservable;\n name;\n hint;\n multiple;\n fileTransfers = {};\n caption = 'Upload';\n formName = '';\n maxfilesize;\n cleariconclass;\n cleariconhint;\n selectedUploadTypePath;\n DEFAULT_CAPTIONS = {\n MULTIPLE_SELECT: 'Drop your files here.',\n SELECT: 'Select'\n };\n DEVICE_CONTENTTYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n AUDIO: 'audio',\n FILES: 'files'\n };\n FILESIZE_MB = 1048576;\n widgetProps;\n _isMobileType;\n _isCordova;\n // parentPrefabScope = element.closest('.app-prefab').isolateScope(),\n CONSTANT_FILE_SERVICE = 'FileService';\n uploadData = {\n file: undefined,\n uploadPath: undefined\n };\n allowedFileUploadExtensions = getWmProjectProperties().allowedFileUploadExtensions;\n defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);\n chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;\n datasource;\n fileUploadMessage = 'Drop your files here or click here to browse';\n uploadedFiles = {\n fileName: '',\n path: '',\n length: '',\n status: ''\n };\n highlightDropArea;\n /*_hasOnSuccessEvt = WM.isDefined(attrs.onSuccess);\n _hasOnErrorEvt = WM.isDefined(attrs.onError);*/\n\n // Checking if the selected file is valid for the choosen filter type\n isValidFile(filename, contenttype, extensionName, isMobileType) {\n let isValid, contentTypes;\n\n if (!contenttype) {\n return true;\n }\n contentTypes = toLower(contenttype).split(',');\n\n if (includes(contentTypes, 'image/*') || (includes(contentTypes, 'image') && isMobileType)) {\n isValid = isImageFile(filename);\n // If one of the content type chosen is image and user uploads image it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'audio/*') || (includes(contentTypes, 'audio') && isMobileType)) {\n isValid = isAudioFile(filename);\n // If one of the content type chosen is audio/* and user uploads audio it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'video/*') || (includes(contentTypes, 'video') && isMobileType)) {\n isValid = isVideoFile(filename);\n // If one of the content type chosen is video/* and user uploads video it is valid file\n if (isValid) {\n return isValid;\n }\n }\n /*content type and the uploaded file extension should be same*/\n if (includes(contentTypes, '.' + toLower(extensionName))) {\n isValid = true;\n }\n return isValid;\n }\n\n /* this return the array of files which are having the file size not more than maxfilesize and filters based on contenttype */\n getValidFiles($files) {\n const validFiles = [];\n const errorFiles = [];\n const MAXFILEUPLOAD_SIZE = parseFloat(this.maxfilesize) * this.FILESIZE_MB || this.FILESIZE_MB;\n const MAX_FILE_UPLOAD_FORMATTED_SIZE = (this.maxfilesize || '1') + 'MB';\n\n // if contenttype is files for mobile projects.\n if (this.chooseFilter === this.DEVICE_CONTENTTYPES.FILES) {\n this.chooseFilter = '';\n }\n\n forEach($files, (file) => {\n /* check for the file content type before uploading */\n if (!this.isValidFile(file.name, this.chooseFilter, this.getFileExtension(file.name), this._isMobileType)) {\n const msg = `${this.appLocale.LABEL_FILE_EXTENTION_VALIDATION_MESSAGE} ${this.chooseFilter}`;\n this.handleErrorFiles('INVALID_FILE_EXTENSION', msg, file, errorFiles);\n return;\n }\n if (file.size > MAXFILEUPLOAD_SIZE) {\n const msg = `${this.appLocale.LABEL_FILE_EXCEED_VALIDATION_MESSAGE} ${MAX_FILE_UPLOAD_FORMATTED_SIZE}`;\n this.handleErrorFiles('INVALID_FILE_SIZE', msg, file, errorFiles);\n return;\n }\n validFiles.push(file);\n });\n return {\n validFiles: validFiles,\n errorFiles: errorFiles\n };\n }\n\n handleErrorFiles(key, msg, file, errorFiles) {\n // Check whether the error callback exist or not. If it exists then dont show taoster message\n if (!this.hasEventCallback('error')) {\n this.app.notifyApp(msg, 'Error');\n }\n const error = {\n key: key,\n message: msg\n };\n file.error = error;\n errorFiles.push(file);\n }\n\n /*Overwrite the caption only if they are default*/\n getCaption(caption, isMultiple, isMobileType) {\n if (includes(this.DEFAULT_CAPTIONS, caption)) {\n return isMultiple && !isMobileType ? this.DEFAULT_CAPTIONS.MULTIPLE_SELECT : this.DEFAULT_CAPTIONS.SELECT;\n }\n return caption;\n }\n\n uploadUrl = 'services';\n\n /* change server path based on user option */\n changeServerUploadPath(path) {\n this.selectedUploadTypePath = path;\n }\n\n /* this function returns the fileextension */\n getFileExtension(fileName) {\n if (fileName && includes(fileName, '.')) {\n return fileName.substring(fileName.lastIndexOf('.') + 1);\n }\n return 'file';\n }\n\n /**\n * Calls select Event\n * @param $event\n * @param $files\n */\n onSelectEventCall($event, $files) {\n this.selectedFiles = $files;\n setTimeout(() => {\n this.invokeEventCallback('select', {\n $event: $.extend($event.$files || {}, $files),\n selectedFiles: $files\n });\n });\n }\n\n onFileElemClick($event) {\n this.highlightDropArea = true;\n\n //The file upload widget value should be set to null to reupload the same file.\n this.$element.find('.file-input')[0].value = null;\n $event.stopPropagation();\n\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.disableDropZone.bind(this));\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n window.removeEventListener('focus', this.disableDropZone);\n }\n\n /*this function to clear the specified file. if argument is not provided, it clears the complete list */\n clear(fileObj) {\n this.selectedFiles = (fileObj) ? this.selectedFiles.filter((file) => file !== fileObj) : [];\n }\n\n /*this function to set the class names for clear icon */\n setClearIconClass(classValue) {\n this.cleariconclass = classValue;\n }\n /*this function to set the hint for clear icon */\n setClearIconHint(hint) {\n this.cleariconhint = hint;\n }\n\n\n /*this function to append upload status dom elements to widget */\n onFileSelect($event, $files) {\n let beforeSelectVal;\n const files = this.getValidFiles($files);\n $files = files.validFiles;\n\n // If the user has previously tried uploading folders using drop, and then uploading using click method we clear the folders dom\n if ($event.type === \"change\") {\n this.selectedFolders = [];\n }\n\n // Trigger error callback event if any invalid file found.\n if (!isEmpty(files.errorFiles)) {\n this.invokeEventCallback('error', {\n $event,\n files: files.errorFiles\n });\n }\n\n // Make call if there are valid files else no call is made\n if ($files.length) {\n this.progressObservable = new Subject();\n // EVENT: ON_BEFORE_SELECT\n beforeSelectVal = this.invokeEventCallback('beforeselect', {\n $event: $.extend($event.$files || {}, $files),\n files: $files\n });\n if (this.datasource) {\n this.datasource._progressObservable = this.progressObservable;\n this.datasource._progressObservable.asObservable().subscribe((progressObj) => {\n forEach(this.selectedFiles, (file) => {\n if (file.name === progressObj.fileName) {\n file.progress = progressObj.progress;\n if (file.progress === 100) {\n file.status = 'success';\n } else {\n file.status = progressObj.status;\n if (progressObj.errMsg) {\n file.errMsg = progressObj.errMsg;\n }\n }\n }\n });\n });\n } else {\n this.selectedFiles = $files;\n }\n if (beforeSelectVal !== false) {\n // EVENT: ON_SELECT\n this.onSelectEventCall($event, $files);\n }\n }\n }\n\n // Prevent default behavior (Prevent file from being opened)\n dragOverHandler($event) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n // Get the file data if it exists and call the onFileSelect function\n onFileDrop($event) {\n $event.preventDefault();\n let listOfFiles = [];\n this.selectedFolders = [];\n const filesData = $event.dataTransfer.items;\n if (filesData.length > 0) {\n // Use DataTransferItemList interface to access the file(s)\n for (var i = 0; i < filesData.length; i++) {\n // Get all the files and push them into an array\n if (filesData[i].webkitGetAsEntry().isFile) {\n listOfFiles.push(filesData[i].getAsFile());\n }\n // If a selected item is directory push the folder element into an array and display error message by adding to dom\n else if(filesData[i].webkitGetAsEntry().isDirectory) {\n this.selectedFolders.push(filesData[i].getAsFile());\n }\n }\n this.onFileSelect($event, listOfFiles);\n }\n }\n\n dragOverCb(e) {\n e.preventDefault();\n $(this.nativeElement).find('#dropzone').addClass('highlight-drop-box');\n }\n\n dropCb() {\n $(this.nativeElement).find('#dropzone').removeClass('highlight-drop-box');\n }\n\n // this function triggers file select window, when clicked anywhere on the file upload widget in case of multi select\n triggerFileSelect() {\n this.$element.find('.file-input').trigger('click');\n }\n\n /**\n * Aborts a file upload request\n * @param $file, the file for which the request is to be aborted\n */\n abortFileUpload($file) {\n this.datasource.execute(DataSource.Operation.CANCEL, $file);\n }\n\n /* Define the property change handler. This function will be triggered when there is a change in the widget property */\n onPropertyChange(key, nv, ov) {\n /*Monitoring changes for styles or properties and accordingly handling respective changes.*/\n switch (key) {\n case 'uploadpath':\n // TODO Srinivas: why do we need uploadpath\n this.changeServerUploadPath(nv);\n break;\n case 'contenttype':\n if (this.defaultAllowedExtensions.includes('*/*')) {\n this.chooseFilter = nv.split(' ').join(',')\n } else {\n this.chooseFilter = this.defaultAllowedExtensions.filter(item => nv.split(' ').join(',').includes(item));\n if (isEmpty(this.chooseFilter)) {\n this.chooseFilter = this.defaultAllowedExtensions;\n }\n }\n\n break;\n case 'multiple':\n this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');\n this.caption = this.getCaption(this.caption, this.multiple, this._isMobileType);\n break;\n case 'fileuploadmessage':\n this.fileUploadMessage = nv;\n }\n\n super.onPropertyChange(key, nv, ov);\n }\n\n constructor(inj: Injector, private app: App, @Attribute('select.event') public onSelectEvt, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n // styler(this.nativeElement, this);\n }\n\n ngOnInit() {\n super.ngOnInit();\n // adding, dragover and drop on the document as when file is dragged on to the page highlight the dropzones and remove highlight on file drop\n document.addEventListener('dragover', this.dragOverCb.bind(this));\n document.addEventListener('drop', this.dropCb.bind(this));\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.dropCb.bind(this));\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n document.removeEventListener('dragover', this.dragOverCb);\n document.removeEventListener('drop', this.dropCb);\n document.removeEventListener('mouseleave', this.dropCb);\n super.ngOnDestroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { FileUploadComponent } from './file-upload.component';\n\nconst components = [\n FileUploadComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class FileUploadModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, Injector,
|
|
1
|
+
import { AfterViewInit, Injector, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { App } from '@wm/core';
|
|
3
3
|
import { StylableComponent } from '@wm/components/base';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -38,7 +38,9 @@ export declare class FileUploadComponent extends StylableComponent implements On
|
|
|
38
38
|
file: any;
|
|
39
39
|
uploadPath: any;
|
|
40
40
|
};
|
|
41
|
-
|
|
41
|
+
allowedFileUploadExtensions: any;
|
|
42
|
+
defaultAllowedExtensions: any;
|
|
43
|
+
chooseFilter: any;
|
|
42
44
|
datasource: any;
|
|
43
45
|
fileUploadMessage: string;
|
|
44
46
|
uploadedFiles: {
|
|
@@ -391,7 +391,7 @@
|
|
|
391
391
|
else if (eventAction === KEY_MOVEMENTS.ON_ENTER || (eventAction === KEY_MOVEMENTS.ON_MOUSE_ENTER && this.showonhover)) {
|
|
392
392
|
this.bsDropdown.toggle(true);
|
|
393
393
|
}
|
|
394
|
-
else if (lodashEs.includes([KEY_MOVEMENTS.MOVE_UP, KEY_MOVEMENTS.MOVE_LEFT], eventAction) || (eventAction == KEY_MOVEMENTS.ON_MOUSE_LEAVE && this.autoclose == i5.AUTOCLOSE_TYPE.ALWAYS)) {
|
|
394
|
+
else if (lodashEs.includes([KEY_MOVEMENTS.MOVE_UP, KEY_MOVEMENTS.MOVE_LEFT], eventAction) || (eventAction == KEY_MOVEMENTS.ON_MOUSE_LEAVE && this.autoclose == i5.AUTOCLOSE_TYPE.ALWAYS && this.showonhover)) {
|
|
395
395
|
this.bsDropdown.hide();
|
|
396
396
|
}
|
|
397
397
|
$event.preventDefault();
|