UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

281 lines (280 loc) 20.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { Component, Input, EventEmitter, Output, forwardRef, ViewChild, ElementRef, Renderer2 } from '@angular/core'; import { AsiFileService } from './../../services/asi-file.service'; import * as nh from '../../native-helper'; export class AsiFileChooserComponent extends DefaultControlValueAccessor { /** * @param {?} fileService * @param {?} renderer * @param {?} elementRef */ constructor(fileService, renderer, elementRef) { super(); this.fileService = fileService; this.renderer = renderer; this.elementRef = elementRef; /** * Label position */ this.labelPosition = 'top'; /** * Preload filechooser with an url */ this.fileSrc = null; /** * Allow you to force the name of the file */ this.fileName = null; /** * By default we dont block the file is the user select a wrong type */ this.blockImport = false; /** * Icon to display */ this.icon = 'fa fa-paperclip'; /** * Event emitted when an error occured with the selected file */ this.onError = new EventEmitter(); this.acceptAttribute = ''; this.dragging = false; this.loaded = false; this.fileLoaded = false; } /** * @return {?} */ ngOnInit() { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); if (this.fileSrc != null) { this.fileService.getFileAsBlob(this.fileSrc).subscribe(blob => { /** @type {?} */ const fileName = this.fileName || this.fileSrc.split('/').pop(); /** @type {?} */ const file = new Blob([blob], { type: blob.type }); file.name = fileName; this.value = file; }); } } /** * @return {?} */ ngOnChanges() { if (nh.isArray(this.accept)) { (/** @type {?} */ (this.accept)).forEach((accept) => { this.acceptAttribute += accept.extension + ', ' + accept.mimeType + ','; }); } else if (this.accept != null) { /** @type {?} */ const aAccept = (/** @type {?} */ (this.accept)); this.acceptAttribute = aAccept.extension + ', ' + aAccept.mimeType; } } /** * @return {?} */ openFileInput() { this.fileInput.nativeElement.value = null; this.fileInput.nativeElement.click(); } /** * @return {?} */ getFileUrl() { return this.fileService.getFileUrl(this.value); } /** * @return {?} */ clean() { this.value = null; } /** * @return {?} */ handleDragEnter() { this.dragging = true; } /** * @return {?} */ handleDragLeave() { this.dragging = false; } /** * @param {?} e * @return {?} */ handleDrop(e) { e.preventDefault(); this.dragging = false; this.handleInputChange(e); } /** * @return {?} */ handleFileLoad() { this.fileLoaded = true; } /** * @param {?} event * @return {?} */ handleInputChange(event) { /** @type {?} */ const file = event.dataTransfer ? event.dataTransfer.files[0] : event.target.files[0]; if (this.blockImport && !this.isValideMimeType(file.type)) { this.onError.emit({ error: 'FORMAT', file: file }); return; } this.loaded = false; this.value = file; } /** * @return {?} */ downloadForIE() { if (navigator.msSaveBlob) { navigator.msSaveBlob(this.value, this.value.name); } } /** * @param {?} mimeType * @return {?} */ isValideMimeType(mimeType) { if (!this.accept) { return true; } if (nh.isArray(this.accept)) { /** @type {?} */ const accepts = /** @type {?} */ (this.accept); for (let accept of accepts) { if (accept.mimeType === mimeType) { return true; } } } else { /** @type {?} */ const aAccept = (/** @type {?} */ (this.accept)); return aAccept.mimeType === mimeType; } return false; } } AsiFileChooserComponent.decorators = [ { type: Component, args: [{ selector: 'asi-file-chooser', host: { 'class': 'asi-component asi-file-chooser' }, template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<div class=\"asi-file-chooser-container\">\n <label ondragover=\"return false;\" [class.loaded]=\"loaded\" (dragenter)=\"handleDragEnter()\" (dragleave)=\"handleDragLeave()\"\n (drop)=\"handleDrop($event)\">\n <asi-button size=\"small\" class=\"asi-focus-error\" (click)=\"openFileInput()\">\n <asi-fa-icon [icon]=\"icon\" size=\"2x\"></asi-fa-icon>\n </asi-button>\n <input #fileInput type=\"file\" [attr.id]=\"id\" [attr.name]=\"name\" [disabled]=\"disabled\" name=\"file\" [accept]=\"acceptAttribute\" (change)=\"handleInputChange($event)\" />\n </label>\n <div class=\"file-link\" *ngIf=\"value != null\">\n <a [title]=\"value.name\" (click)=\"downloadForIE()\" [innerHTML]=\"value.name\" [download]=\"value.name\" [href]=\"getFileUrl()\" target=\"_empty\"></a>\n <asi-fa-icon (onClick)=\"clean()\" icon=\"fa fa-trash-o\" size=\"lg\"></asi-fa-icon>\n </div>\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AsiFileChooserComponent), multi: true } ] }] } ]; /** @nocollapse */ AsiFileChooserComponent.ctorParameters = () => [ { type: AsiFileService }, { type: Renderer2 }, { type: ElementRef } ]; AsiFileChooserComponent.propDecorators = { id: [{ type: Input }], name: [{ type: Input }], label: [{ type: Input }], labelPosition: [{ type: Input }], fileSrc: [{ type: Input }], fileName: [{ type: Input }], accept: [{ type: Input }], blockImport: [{ type: Input }], icon: [{ type: Input }], onError: [{ type: Output }], fileInput: [{ type: ViewChild, args: ['fileInput',] }] }; if (false) { /** * html id * @type {?} */ AsiFileChooserComponent.prototype.id; /** * html name * @type {?} */ AsiFileChooserComponent.prototype.name; /** * Label to display (is translated) * @type {?} */ AsiFileChooserComponent.prototype.label; /** * Label position * @type {?} */ AsiFileChooserComponent.prototype.labelPosition; /** * Preload filechooser with an url * @type {?} */ AsiFileChooserComponent.prototype.fileSrc; /** * Allow you to force the name of the file * @type {?} */ AsiFileChooserComponent.prototype.fileName; /** * Liste of mimetype : "application/pdf" used to display a correct selection view * @type {?} */ AsiFileChooserComponent.prototype.accept; /** * By default we dont block the file is the user select a wrong type * @type {?} */ AsiFileChooserComponent.prototype.blockImport; /** * Icon to display * @type {?} */ AsiFileChooserComponent.prototype.icon; /** * Event emitted when an error occured with the selected file * @type {?} */ AsiFileChooserComponent.prototype.onError; /** @type {?} */ AsiFileChooserComponent.prototype.acceptAttribute; /** @type {?} */ AsiFileChooserComponent.prototype.fileInput; /** @type {?} */ AsiFileChooserComponent.prototype.dragging; /** @type {?} */ AsiFileChooserComponent.prototype.loaded; /** @type {?} */ AsiFileChooserComponent.prototype.fileLoaded; /** @type {?} */ AsiFileChooserComponent.prototype.file; /** @type {?} */ AsiFileChooserComponent.prototype.fileService; /** @type {?} */ AsiFileChooserComponent.prototype.renderer; /** @type {?} */ AsiFileChooserComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWZpbGUtY2hvb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWZpbGUtY2hvb3Nlci9hc2ktZmlsZS1jaG9vc2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQ3ZDLFNBQVMsRUFBVSxVQUFVLEVBQUUsU0FBUyxFQUNwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWMxQyxNQUFNLDhCQUErQixTQUFRLDJCQUEyQjs7Ozs7O0lBa0N0RSxZQUFvQixXQUEyQixFQUNyQyxVQUNBO1FBQ1IsS0FBSyxFQUFFLENBQUM7UUFIVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDckMsYUFBUSxHQUFSLFFBQVE7UUFDUixlQUFVLEdBQVYsVUFBVTs7Ozs2QkEzQjJFLEtBQUs7Ozs7dUJBRXpFLElBQUk7Ozs7d0JBRUgsSUFBSTs7OzsyQkFJVCxLQUFLOzs7O29CQUVaLGlCQUFpQjs7Ozt1QkFHYixJQUFJLFlBQVksRUFBTzsrQkFFekIsRUFBRTt3QkFJVCxLQUFLO3NCQUNQLEtBQUs7MEJBQ0QsS0FBSztLQVFqQjs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFOztnQkFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7Z0JBQ2hFLE1BQU0sSUFBSSxHQUFRLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNuQixDQUFDLENBQUM7U0FDSjtLQUNGOzs7O0lBRUQsV0FBVztRQUNULEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixtQkFBcUIsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2FBQ3pFLENBQUMsQ0FBQztTQUNKO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQzs7WUFDL0IsTUFBTSxPQUFPLEdBQWdCLG1CQUFjLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDcEU7S0FDRjs7OztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3RDOzs7O0lBRUQsVUFBVTtRQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEQ7Ozs7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbkI7Ozs7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7S0FDdkI7Ozs7O0lBRUQsVUFBVSxDQUFDLENBQVE7UUFDakIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzQjs7OztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztLQUN4Qjs7Ozs7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVOztRQUMxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQixLQUFLLEVBQUUsUUFBUTtnQkFDZixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbkI7Ozs7SUFFRCxhQUFhO1FBQ1gsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkQ7S0FDRjs7Ozs7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUN2QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUNELEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFDNUIsTUFBTSxPQUFPLHFCQUF1QixJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ2hELEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFBQyxJQUFJLENBQUMsQ0FBQzs7WUFDTixNQUFNLE9BQU8sR0FBZ0IsbUJBQWMsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQTtTQUNyQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Ozs7WUE3SWhCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUU7Z0JBQ25ELGsrQkFBZ0Q7Z0JBQ2hELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO3dCQUN0RCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7O1lBZlEsY0FBYztZQUZxQixTQUFTO1lBQXJCLFVBQVU7OztpQkFxQnZDLEtBQUs7bUJBRUwsS0FBSztvQkFFTCxLQUFLOzRCQUVMLEtBQUs7c0JBRUwsS0FBSzt1QkFFTCxLQUFLO3FCQUVMLEtBQUs7MEJBRUwsS0FBSzttQkFFTCxLQUFLO3NCQUdMLE1BQU07d0JBSU4sU0FBUyxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2lNaW1lVHlwZSB9IGZyb20gJy4vYXNpLWZpbGUtY2hvb3Nlci1jb25zdGFudHMnO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgZm9yd2FyZFJlZixcbiAgT25DaGFuZ2VzLCBWaWV3Q2hpbGQsIE9uSW5pdCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXNpRmlsZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2FzaS1maWxlLnNlcnZpY2UnO1xuXG5pbXBvcnQgKiBhcyBuaCBmcm9tICcuLi8uLi9uYXRpdmUtaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXNpLWZpbGUtY2hvb3NlcicsXG4gIGhvc3Q6IHsgJ2NsYXNzJzogJ2FzaS1jb21wb25lbnQgYXNpLWZpbGUtY2hvb3NlcicgfSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FzaS1maWxlLWNob29zZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzaUZpbGVDaG9vc2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFzaUZpbGVDaG9vc2VyQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gIC8qKiBodG1sIGlkICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIC8qKiBodG1sIG5hbWUgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICAgLyoqIExhYmVsIHRvIGRpc3BsYXkgKGlzIHRyYW5zbGF0ZWQpICovXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBwb3NpdGlvbiAqL1xuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdib3R0b20tY2VudGVyJyB8ICd0b3AtY2VudGVyJyA9ICd0b3AnO1xuICAvKiogUHJlbG9hZCBmaWxlY2hvb3NlciB3aXRoIGFuIHVybCAqL1xuICBASW5wdXQoKSBmaWxlU3JjOiBzdHJpbmcgPSBudWxsO1xuICAvKiogQWxsb3cgeW91IHRvIGZvcmNlIHRoZSBuYW1lIG9mIHRoZSBmaWxlICovXG4gIEBJbnB1dCgpIGZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICAvKiogTGlzdGUgb2YgbWltZXR5cGUgOiBcImFwcGxpY2F0aW9uL3BkZlwiIHVzZWQgdG8gZGlzcGxheSBhIGNvcnJlY3Qgc2VsZWN0aW9uIHZpZXcgKi9cbiAgQElucHV0KCkgYWNjZXB0OiBBcnJheTxBc2lNaW1lVHlwZT4gfCBBc2lNaW1lVHlwZTtcbiAgLyoqIEJ5IGRlZmF1bHQgd2UgZG9udCBibG9jayB0aGUgZmlsZSBpcyB0aGUgdXNlciBzZWxlY3QgYSB3cm9uZyB0eXBlICovXG4gIEBJbnB1dCgpIGJsb2NrSW1wb3J0ID0gZmFsc2U7XG4gIC8qKiBJY29uIHRvIGRpc3BsYXkgKi9cbiAgQElucHV0KCkgaWNvbiA9ICdmYSBmYS1wYXBlcmNsaXAnO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJlZCB3aXRoIHRoZSBzZWxlY3RlZCBmaWxlICovXG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgYWNjZXB0QXR0cmlidXRlID0gJyc7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0OiBhbnk7XG5cbiAgZHJhZ2dpbmcgPSBmYWxzZTtcbiAgbG9hZGVkID0gZmFsc2U7XG4gIGZpbGVMb2FkZWQgPSBmYWxzZTtcblxuICBmaWxlOiBGaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVNlcnZpY2U6IEFzaUZpbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xhYmVsLScgKyB0aGlzLmxhYmVsUG9zaXRpb24pO1xuICAgIGlmICh0aGlzLmZpbGVTcmMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5maWxlU2VydmljZS5nZXRGaWxlQXNCbG9iKHRoaXMuZmlsZVNyYykuc3Vic2NyaWJlKGJsb2IgPT4ge1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMuZmlsZU5hbWUgfHwgdGhpcy5maWxlU3JjLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgIGNvbnN0IGZpbGU6IGFueSA9IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7XG4gICAgICAgIGZpbGUubmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmIChuaC5pc0FycmF5KHRoaXMuYWNjZXB0KSkge1xuICAgICAgKDxBcnJheTxBc2lNaW1lVHlwZT4+dGhpcy5hY2NlcHQpLmZvckVhY2goKGFjY2VwdCkgPT4ge1xuICAgICAgICB0aGlzLmFjY2VwdEF0dHJpYnV0ZSArPSBhY2NlcHQuZXh0ZW5zaW9uICsgJywgJyArIGFjY2VwdC5taW1lVHlwZSArICcsJztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYUFjY2VwdDogQXNpTWltZVR5cGUgPSAoPEFzaU1pbWVUeXBlPnRoaXMuYWNjZXB0KTtcbiAgICAgIHRoaXMuYWNjZXB0QXR0cmlidXRlID0gYUFjY2VwdC5leHRlbnNpb24gKyAnLCAnICsgYUFjY2VwdC5taW1lVHlwZTtcbiAgICB9XG4gIH1cblxuICBvcGVuRmlsZUlucHV0KCkge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIGdldEZpbGVVcmwoKTogU2FmZVJlc291cmNlVXJsIHtcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS5nZXRGaWxlVXJsKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgY2xlYW4oKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBoYW5kbGVEcmFnRW50ZXIoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVEcmFnTGVhdmUoKSB7XG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlRHJvcChlOiBFdmVudCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShlKTtcbiAgfVxuXG4gIGhhbmRsZUZpbGVMb2FkKCkge1xuICAgIHRoaXMuZmlsZUxvYWRlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXSA6IGV2ZW50LnRhcmdldC5maWxlc1swXTtcblxuICAgIGlmICh0aGlzLmJsb2NrSW1wb3J0ICYmICF0aGlzLmlzVmFsaWRlTWltZVR5cGUoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy5vbkVycm9yLmVtaXQoe1xuICAgICAgICBlcnJvcjogJ0ZPUk1BVCcsXG4gICAgICAgIGZpbGU6IGZpbGVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMudmFsdWUgPSBmaWxlO1xuICB9XG5cbiAgZG93bmxvYWRGb3JJRSgpIHtcbiAgICBpZiAobmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHtcbiAgICAgIG5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMudmFsdWUsIHRoaXMudmFsdWUubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkZU1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYWNjZXB0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5oLmlzQXJyYXkodGhpcy5hY2NlcHQpKSB7XG4gICAgICBjb25zdCBhY2NlcHRzID0gPEFycmF5PEFzaU1pbWVUeXBlPj50aGlzLmFjY2VwdDtcbiAgICAgIGZvciAobGV0IGFjY2VwdCBvZiBhY2NlcHRzKSB7XG4gICAgICAgIGlmIChhY2NlcHQubWltZVR5cGUgPT09IG1pbWVUeXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYUFjY2VwdDogQXNpTWltZVR5cGUgPSAoPEFzaU1pbWVUeXBlPnRoaXMuYWNjZXB0KTtcbiAgICAgIHJldHVybiBhQWNjZXB0Lm1pbWVUeXBlID09PSBtaW1lVHlwZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==