UNPKG

@junte/ui

Version:

Quality Angular UI components kit

192 lines 22.6 kB
import { __decorate, __metadata } from "tslib"; import { animate, state, style, transition, trigger } from '@angular/animations'; import { Component, ComponentRef, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core'; import { DeviceService } from '../../layout/responsive/device.service'; import { MethodApi } from '../../core/decorators/api'; import { Breakpoint } from '../../core/enums/breakpoint'; import { UI } from '../../core/enums/ui'; import { BreakpointService } from '../../layout/responsive/breakpoint.service'; const ANIMATION_CLOSE_DURATION = 300; const BACKDROP_FILTER = 'blur(5px)'; var ModalState; (function (ModalState) { ModalState["hidden"] = "hidden"; ModalState["visible"] = "visible"; })(ModalState || (ModalState = {})); export class ModalOptions { constructor(defs = null) { this.maxWidth = '800'; this.maxHeight = '600'; this.hold = false; this.animation = true; Object.assign(this, defs); } } var Display; (function (Display) { Display["block"] = "block"; Display["none"] = "none"; })(Display || (Display = {})); let ModalComponent = class ModalComponent { constructor(renderer, hostRef, breakpoint, device) { this.renderer = renderer; this.hostRef = hostRef; this.breakpoint = breakpoint; this.device = device; this.host = 'jnt-modal-host'; this.ui = UI; this.options = new ModalOptions(); this.mobile = this.breakpoint.current === Breakpoint.mobile; this.opened$ = new EventEmitter(); this.display = Display.none; } set opened(opened) { this._opened = opened; this.opened$.emit(opened); } get opened() { return this._opened; } get windows() { return this.device.platform.windows; } set content(content) { this.contentTemplate = null; this.container.clear(); if (content instanceof TemplateRef) { this.contentTemplate = content; } else if (content instanceof ComponentRef) { this.container.insert(content.hostView, 0); } } start(event) { if (event.fromState === ModalState.hidden) { this.display = Display.block; } } done(event) { if (event.toState === ModalState.hidden) { this.display = Display.none; } } // TODO: options to type with optionals?. open(content, options = {}) { this.options = new ModalOptions(options); this.content = content; if (!!this.backdrop) { this.renderer.setStyle(this.backdrop.nativeElement, 'filter', BACKDROP_FILTER); if (!this.mobile && this.options.animation) { this.renderer.setStyle(this.backdrop.nativeElement, 'animation', 'jnt-scale-in .5s cubic-bezier(0.165, 0.840, 0.440, 1.000) forwards'); } } this.renderer.setStyle(document.body, 'overflow', 'hidden'); this.opened = true; } close() { this.renderer.removeStyle(document.body, 'overflow'); if (!!this.backdrop) { this.renderer.removeStyle(this.backdrop.nativeElement, 'filter'); if (!this.mobile && this.options.animation) { this.renderer.setStyle(this.backdrop.nativeElement, 'animation', 'jnt-scale-out ' + ANIMATION_CLOSE_DURATION + 'ms cubic-bezier(0.165, 0.840, 0.440, 1.000) forwards'); } } this.opened = false; this.hostRef.nativeElement.scrollTop = 0; setTimeout(() => { this.content = null; this.renderer.removeStyle(this.backdrop.nativeElement, 'animation'); }, ANIMATION_CLOSE_DURATION); } }; ModalComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef }, { type: BreakpointService }, { type: DeviceService } ]; __decorate([ HostBinding('attr.host'), __metadata("design:type", Object) ], ModalComponent.prototype, "host", void 0); __decorate([ Input(), __metadata("design:type", ElementRef) ], ModalComponent.prototype, "backdrop", void 0); __decorate([ Output(), __metadata("design:type", Object) ], ModalComponent.prototype, "opened$", void 0); __decorate([ ViewChild('container', { read: ViewContainerRef }), __metadata("design:type", Object) ], ModalComponent.prototype, "container", void 0); __decorate([ HostBinding('style.display'), __metadata("design:type", Object) ], ModalComponent.prototype, "display", void 0); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], ModalComponent.prototype, "opened", null); __decorate([ HostBinding('attr.data-windows'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], ModalComponent.prototype, "windows", null); __decorate([ MethodApi({ description: 'show modal' }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], ModalComponent.prototype, "open", null); __decorate([ MethodApi({ description: 'close modal' }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], ModalComponent.prototype, "close", null); ModalComponent = __decorate([ Component({ selector: 'jnt-modal', template: "<jnt-block child-of=\"jnt-modal-host\" [padding]=\"ui.gutter.none\" data-modal\n [@.disabled]=\"mobile\"\n [@move]=\"opened ? 'visible' : 'hidden'\"\n (@move.start)='start($event)'\n (@move.done)='done($event)'>\n <jnt-stack child-of=\"jnt-modal-host\" data-title *ngIf=\"!!options.title\"\n [orientation]=\"ui.orientation.horizontal\"\n [justify]=\"ui.justify.between\"\n [align]=\"ui.align.center\">\n <jnt-stack child-of=\"jnt-modal-host\" [orientation]=\"ui.orientation.horizontal\"\n [gutter]=\"ui.gutter.small\">\n <jnt-icon child-of=\"jnt-modal-host\" *ngIf=\"!!options.title.icon\"\n [icon]=\"options.title.icon\"></jnt-icon>\n <span child-of=\"jnt-modal-host\" data-text>{{options.title.text}}</span>\n </jnt-stack>\n\n <jnt-button child-of=\"jnt-modal-host\" *ngIf=\"!options.hold\"\n [scheme]=\"ui.scheme.secondary\"\n [outline]=\"ui.outline.transparent\"\n [size]=\"ui.size.small\"\n [shape]=\"ui.shape.circle\"\n [icon]=\"ui.icons.close\"\n (click)=\"close()\">\n </jnt-button>\n </jnt-stack>\n\n <div child-of=\"jnt-modal-host\" data-content [ngStyle]=\"{'max-height.px': options.maxHeight, 'max-width.px': options.maxWidth}\"\n [attr.data-windows]=\"device.platform.windows\">\n <ng-container #container>\n <ng-container *ngIf=\"!!contentTemplate\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!!options.content\">\n <ng-container *ngTemplateOutlet=\"options.content\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <ng-container *ngIf=\"!!options.footer\">\n <ng-container *ngTemplateOutlet=\"options.footer\"></ng-container>\n </ng-container>\n\n</jnt-block>\n<div child-of=\"jnt-modal-host\" *ngIf=\"!!opened\" #backdrop data-overlay\n (click)=\"!options.hold ? close() : null\"\n [@.disabled]=\"mobile\"\n [@blackout]=\"opened\"></div>", animations: [ trigger('move', [ state('hidden', style({ top: '100%', left: '50%', transform: 'translate(-50%, 0)', })), state('visible', style({ top: '50%', left: '50%', transform: 'translate(-50%, -50%)', })), transition('hidden => visible', [ animate('.5s cubic-bezier(0.165, 0.840, 0.440, 1.000)') ]), transition('visible => hidden', [ animate('.3s cubic-bezier(0.165, 0.840, 0.440, 1.000)') ]), ]), trigger('blackout', [ state('void', style({ opacity: 0, })), state('*', style({ opacity: 1, })), transition('void <=> *', [ animate('.5s ease-in-out') ]), ]), ] }), __metadata("design:paramtypes", [Renderer2, ElementRef, BreakpointService, DeviceService]) ], ModalComponent); export { ModalComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL292ZXJsYXlzL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRS9FLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQztBQUVwQyxJQUFLLFVBR0o7QUFIRCxXQUFLLFVBQVU7SUFDYiwrQkFBaUIsQ0FBQTtJQUNqQixpQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSEksVUFBVSxLQUFWLFVBQVUsUUFHZDtBQU9ELE1BQU0sT0FBTyxZQUFZO0lBVXZCLFlBQVksT0FBOEIsSUFBSTtRQVI5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUliLGNBQVMsR0FBRyxJQUFJLENB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O2FBQ0YsQ0FDRjtZQUVELE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hCLEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDO29CQUNKLE9BQU8sRUFBRSxDQUFDO2lCQUNYLENBQUMsQ0FDSDtnQkFDRCxLQUFLLENBQ0gsR0FBRyxFQUNILEtBQUssQ0FBQztvQkFDSixPQUFPLEVBQUUsQ0FBQztpQkFDWCxDQUFDLENBQ0g7Z0JBQ0QsVUFBVSxDQUNSLFlBQVksRUFDWjtvQkFDRSxPQUFPLENBQUMsaUJBQWlCLENBQUM7aUJBQzNCLENBQ0Y7YUFDRixDQUNGO1NBQ0Y7S0FDRixDQUFDO3FDQW1EOEIsU0FBUztRQUNWLFVBQVU7UUFDUCxpQkFBaUI7UUFDdEIsYUFBYTtHQXBEN0IsY0FBYyxDQWtHMUI7U0FsR1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50LCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5b3V0L3Jlc3BvbnNpdmUvZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWV0aG9kQXBpIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9icmVha3BvaW50JztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uL2xheW91dC9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5cbmNvbnN0IEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTiA9IDMwMDtcbmNvbnN0IEJBQ0tEUk9QX0ZJTFRFUiA9ICdibHVyKDVweCknO1xuXG5lbnVtIE1vZGFsU3RhdGUge1xuICBoaWRkZW4gPSAnaGlkZGVuJyxcbiAgdmlzaWJsZSA9ICd2aXNpYmxlJ1xufVxuXG5pbnRlcmZhY2UgTW9kYWxUaXRsZSB7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RhbE9wdGlvbnMge1xuXG4gIG1heFdpZHRoID0gJzgwMCc7XG4gIG1heEhlaWdodCA9ICc2MDAnO1xuICBob2xkID0gZmFsc2U7XG4gIHRpdGxlPzogTW9kYWxUaXRsZTtcbiAgZm9vdGVyPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgY29udGVudD86IFRlbXBsYXRlUmVmPGFueT47XG4gIGFuaW1hdGlvbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoZGVmczogUGFydGlhbDxNb2RhbE9wdGlvbnM+ID0gbnVsbCkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGVmcyk7XG4gIH1cblxufVxuXG5leHBvcnQgdHlwZSBNb2RhbENvbnRlbnQgPSBUZW1wbGF0ZVJlZjxhbnk+IHwgQ29tcG9uZW50UmVmPGFueT47XG5cbmVudW0gRGlzcGxheSB7XG4gIGJsb2NrID0gJ2Jsb2NrJyxcbiAgbm9uZSA9ICdub25lJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuZW5jYXBzdWxhdGVkLmh0bWwnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignbW92ZScsIFtcbiAgICAgICAgc3RhdGUoXG4gICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICBsZWZ0OiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAwKScsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgc3RhdGUoXG4gICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICBsZWZ0OiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAnaGlkZGVuID0+IHZpc2libGUnLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJy41cyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApJylcbiAgICAgICAgICBdLFxuICAgICAgICApLFxuICAgICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAgICd2aXNpYmxlID0+IGhpZGRlbicsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnLjNzIGN1YmljLWJlemllcigwLjE2NSwgMC44NDAsIDAuNDQwLCAxLjAwMCknKVxuICAgICAgICAgIF0sXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcblxuICAgIHRyaWdnZXIoJ2JsYWNrb3V0JywgW1xuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAndm9pZCcsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAnKicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAgICd2b2lkIDw9PiAqJyxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBhbmltYXRlKCcuNXMgZWFzZS1pbi1vdXQnKVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgIF1cbiAgICApLFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQge1xuXG4gIHByaXZhdGUgX29wZW5lZDogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpIHJlYWRvbmx5IGhvc3QgPSAnam50LW1vZGFsLWhvc3QnO1xuXG4gIHVpID0gVUk7XG4gIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3B0aW9uczogTW9kYWxPcHRpb25zID0gbmV3IE1vZGFsT3B0aW9ucygpO1xuICBtb2JpbGU6IGJvb2xlYW4gPSB0aGlzLmJyZWFrcG9pbnQuY3VycmVudCA9PT0gQnJlYWtwb2ludC5tb2JpbGU7XG5cbiAgQElucHV0KClcbiAgYmFja2Ryb3A6IEVsZW1lbnRSZWY7XG5cbiAgQE91dHB1dCgpXG4gIG9wZW5lZCQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBjb250YWluZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgZGlzcGxheSA9IERpc3BsYXkubm9uZTtcblxuICBASW5wdXQoKVxuICBzZXQgb3BlbmVkKG9wZW5lZDogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW5lZCA9IG9wZW5lZDtcbiAgICB0aGlzLm9wZW5lZCQuZW1pdChvcGVuZWQpO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2luZG93cycpXG4gIGdldCB3aW5kb3dzKCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZS5wbGF0Zm9ybS53aW5kb3dzO1xuICB9XG5cbiAgc2V0IGNvbnRlbnQoY29udGVudDogTW9kYWxDb250ZW50KSB7XG4gICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBudWxsO1xuICAgIHRoaXMuY29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgQ29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5pbnNlcnQoY29udGVudC5ob3N0VmlldywgMCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgYnJlYWtwb2ludDogQnJlYWtwb2ludFNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBkZXZpY2U6IERldmljZVNlcnZpY2UpIHtcbiAgfVxuXG4gIHN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09IE1vZGFsU3RhdGUuaGlkZGVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXkgPSBEaXNwbGF5LmJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIGRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09IE1vZGFsU3RhdGUuaGlkZGVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXkgPSBEaXNwbGF5Lm5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogb3B0aW9ucyB0byB0eXBlIHdpdGggb3B0aW9uYWxzPy5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdzaG93IG1vZGFsJ30pXG4gIG9wZW4oY29udGVudDogTW9kYWxDb250ZW50LCBvcHRpb25zOiBQYXJ0aWFsPE1vZGFsT3B0aW9ucz4gPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBNb2RhbE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICBpZiAoISF0aGlzLmJhY2tkcm9wKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2ZpbHRlcicsIEJBQ0tEUk9QX0ZJTFRFUik7XG4gICAgICBpZiAoIXRoaXMubW9iaWxlICYmIHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmJhY2tkcm9wLm5hdGl2ZUVsZW1lbnQsICdhbmltYXRpb24nLCAnam50LXNjYWxlLWluIC41cyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApIGZvcndhcmRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIEBNZXRob2RBcGkoe2Rlc2NyaXB0aW9uOiAnY2xvc2UgbW9kYWwnfSlcbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICBpZiAoISF0aGlzLmJhY2tkcm9wKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2ZpbHRlcicpO1xuICAgICAgaWYgKCF0aGlzLm1vYmlsZSAmJiB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5iYWNrZHJvcC5uYXRpdmVFbGVtZW50LCAnYW5pbWF0aW9uJywgJ2pudC1zY2FsZS1vdXQgJyArIEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTiArICdtcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApIGZvcndhcmRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudCA9IG51bGw7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2FuaW1hdGlvbicpO1xuICAgIH0sIEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTik7XG4gIH1cbn1cbiJdfQ==