UNPKG

angular-gallery

Version:

Responsive gallery for Angular with touch screen support.

211 lines 22.4 kB
import { __decorate } from "tslib"; import { Component, OnInit, HostBinding, HostListener, ViewChild, ElementRef, Input, ComponentFactoryResolver } from '@angular/core'; import { EventService } from './event.service'; import { AdDirective } from './ad.directive'; var OverlayContainerComponent = /** @class */ (function () { function OverlayContainerComponent(componentFactoryResolver, elementRef, eventService) { var _this = this; this.componentFactoryResolver = componentFactoryResolver; this.elementRef = elementRef; this.eventService = eventService; this.overlayBackdrop = true; this.minTimeout = 30; this._hostOpacity = 0; this.globalEventsSubscription = this.eventService.emitter.subscribe(function (event) { _this.handleGlobalEvents(event); }); } Object.defineProperty(OverlayContainerComponent.prototype, "hostOpacity", { get: function () { return this.properties.fadeIn ? this._hostOpacity : 1; }, set: function (value) { this._hostOpacity = value; }, enumerable: true, configurable: true }); Object.defineProperty(OverlayContainerComponent.prototype, "hostTransition", { get: function () { var duration = this.properties.animationDuration + 'ms '; var esing = this.properties.animationTimingFunction; return 'opacity ' + duration + esing + ', transform ' + duration + esing; }, enumerable: true, configurable: true }); Object.defineProperty(OverlayContainerComponent.prototype, "hostZIndex", { get: function () { return this.properties.zIndex; }, enumerable: true, configurable: true }); Object.defineProperty(OverlayContainerComponent.prototype, "hostWidth", { get: function () { return this.properties.wrapperWidth; }, enumerable: true, configurable: true }); Object.defineProperty(OverlayContainerComponent.prototype, "hostHeight", { get: function () { return this.properties.wrapperHeight; }, enumerable: true, configurable: true }); Object.defineProperty(OverlayContainerComponent.prototype, "hostPosition", { get: function () { return this.properties.position; }, enumerable: true, configurable: true }); OverlayContainerComponent.prototype.onClick = function (event) { if (!this.elementRef.nativeElement.contains(event.target)) { if (this.hostShown) { this.closeOverlay(); } } }; OverlayContainerComponent.prototype.transitionEnd = function (event) { if (event.target.tagName.toLowerCase() != "overlay") { return; } if (event.propertyName != "opacity") { return; } if (this.hostShown) { this.closeOverlayEnd(); //this.stateEvents.emit("shown"); } else { this.hostShown = true; //this.stateEvents.emit("hidden"); } }; Object.defineProperty(OverlayContainerComponent.prototype, "popoverClass", { get: function () { if (this.properties.metadata) { return this.properties.metadata.popoverClass; } }, enumerable: true, configurable: true }); OverlayContainerComponent.prototype.ngOnInit = function () { var _this = this; this.loadComponent(); this.initialOverlay(); setTimeout(function () { _this.isInitial = true; }, this.minTimeout); // Note: not good }; OverlayContainerComponent.prototype.ngAfterViewInit = function () { var _this = this; setTimeout(function () { _this.showOverlayAnimation(); }, this.minTimeout); }; OverlayContainerComponent.prototype.ngOnDestroy = function () { if (this.globalEventsSubscription) { this.globalEventsSubscription.unsubscribe(); } }; OverlayContainerComponent.prototype.initialOverlay = function () { this.hostTransform = 'translateY(' + this.properties.animationTranslateY + ')'; }; OverlayContainerComponent.prototype.showOverlayAnimation = function () { this.hostOpacity = 1; this.hostTransform = 'translateY(0px)'; }; OverlayContainerComponent.prototype.loadComponent = function () { var adItem = this.properties; var componentFactory = this.componentFactoryResolver.resolveComponentFactory(adItem.mainComponent); var viewContainerRef = this.adHost.viewContainerRef; viewContainerRef.clear(); var componentRef = viewContainerRef.createComponent(componentFactory); var componentRefElement = componentRef.location.nativeElement; // Set styles componentRefElement.style.width = this.properties.width; componentRefElement.style.height = this.properties.height; // Set classes if (typeof this.popoverClass === 'string') { componentRefElement.classList.add(this.popoverClass); } if (typeof this.popoverClass === 'object') { this.popoverClass.forEach(function (className) { componentRefElement.classList.add(className); }); } // Pass properties componentRef.instance.overlayProperties = this.properties; }; OverlayContainerComponent.prototype.closeOverlay = function () { this.hostOpacity = 0; this.hostTransform = 'translateY(' + this.properties.animationTranslateY + ')'; }; OverlayContainerComponent.prototype.closeOverlayEnd = function () { this.hostShown = false; this.eventService.emitChangeEvent({ type: '[Overlay] Hide' }); }; OverlayContainerComponent.prototype.handleGlobalEvents = function (event) { if (event.type === 'Hide') { this.closeOverlay(); } }; OverlayContainerComponent.ctorParameters = function () { return [ { type: ComponentFactoryResolver }, { type: ElementRef }, { type: EventService } ]; }; __decorate([ ViewChild(AdDirective, { static: true }) ], OverlayContainerComponent.prototype, "adHost", void 0); __decorate([ Input() ], OverlayContainerComponent.prototype, "properties", void 0); __decorate([ HostBinding('style.opacity') ], OverlayContainerComponent.prototype, "hostOpacity", null); __decorate([ HostBinding('style.transition') ], OverlayContainerComponent.prototype, "hostTransition", null); __decorate([ HostBinding('style.transform') ], OverlayContainerComponent.prototype, "hostTransform", void 0); __decorate([ HostBinding('style.z-index') ], OverlayContainerComponent.prototype, "hostZIndex", null); __decorate([ HostBinding('style.width') ], OverlayContainerComponent.prototype, "hostWidth", null); __decorate([ HostBinding('style.height') ], OverlayContainerComponent.prototype, "hostHeight", null); __decorate([ HostBinding('style.position') ], OverlayContainerComponent.prototype, "hostPosition", null); __decorate([ HostBinding('class.overlay-shown') ], OverlayContainerComponent.prototype, "hostShown", void 0); __decorate([ HostListener('document:click', ['$event']) ], OverlayContainerComponent.prototype, "onClick", null); __decorate([ HostListener('transitionend', ['$event']) ], OverlayContainerComponent.prototype, "transitionEnd", null); OverlayContainerComponent = __decorate([ Component({ selector: 'overlay', template: "<!--\n<div class=\"overlay-backdrop\" \n\t*ngIf=\"properties.overlayBackdrop\" \n\t(click)=\"onBackdropClick()\" \n\t[ngClass]=\"properties.backdropClass\"></div>\n-->\n<!--\n<div class=\"overlay-container\"\n\t[ngStyle]=\"containerStyles\" \n\t[ngClass]=\"properties.overlayClass\">\n\n\t<ng-template ad-host></ng-template>\n</div>\n-->\n\n<ng-template ad-host></ng-template>", styles: [":host{position:absolute;top:0;left:0}:host .overlay-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:0;z-index:1000;pointer-events:auto}"] }) ], OverlayContainerComponent); return OverlayContainerComponent; }()); export { OverlayContainerComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1nYWxsZXJ5LyIsInNvdXJjZXMiOlsibGliL292ZXJsYXkvb3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUM1RyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzdDO0lBa0ZJLG1DQUNZLHdCQUFrRCxFQUNuRCxVQUFzQixFQUNyQixZQUEwQjtRQUh0QyxpQkFTQztRQVJXLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWxGL0Isb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQWlGckIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDL0QsVUFBQyxLQUFLO1lBQ0YsS0FBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQS9FRCxzQkFBSSxrREFBVzthQUFmO1lBQ0ksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFDRCxVQUFnQixLQUFLO1lBQ2pCLElBQUks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QixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7NERBTzFDO0lBR0Q7UUFEQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7a0VBaUJ6QztJQTFFUSx5QkFBeUI7UUFOckMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFNBQVM7WUFDbkIsb1lBQWlEOztTQUVwRCxDQUFDO09BRVcseUJBQXlCLENBd0tyQztJQUFELGdDQUFDO0NBQUEsQUF4S0QsSUF3S0M7U0F4S1kseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4vYWQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbXBvbmVudFByb3BlcnRpZXMsIE92ZXJsYXlQcm9wZXJ0aWVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdvdmVybGF5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL292ZXJsYXktY29udGFpbmVyLmNvbXBvbmVudC5zYXNzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwdWJsaWMgaXNJbml0aWFsOiBib29sZWFuO1xuICAgIGdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgb3ZlcmxheUJhY2tkcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgICBtaW5UaW1lb3V0OiBudW1iZXIgPSAzMDtcbiAgICBfaG9zdE9wYWNpdHk6IG51bWJlciA9IDA7XG5cbiAgICBAVmlld0NoaWxkKEFkRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSkgYWRIb3N0OiBBZERpcmVjdGl2ZTtcblxuICAgIEBJbnB1dCgpIHByb3BlcnRpZXM6IE92ZXJsYXlQcm9wZXJ0aWVzO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5vcGFjaXR5JylcbiAgICBnZXQgaG9zdE9wYWNpdHkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5mYWRlSW4gPyB0aGlzLl9ob3N0T3BhY2l0eSA6IDE7XG4gICAgfVxuICAgIHNldCBob3N0T3BhY2l0eSh2YWx1ZSl7XG4gICAgICAgIHRoaXMuX2hvc3RPcGFjaXR5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS50cmFuc2l0aW9uJylcbiAgICBnZXQgaG9zdFRyYW5zaXRpb24oKXtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BlcnRpZXMuYW5pbWF0aW9uRHVyYXRpb24rJ21zICc7XG4gICAgICAgIGNvbnN0IGVzaW5nID0gdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uO1xuICAgICAgICByZXR1cm4gJ29wYWNpdHkgJysgZHVyYXRpb24gKyBlc2luZyArICcsIHRyYW5zZm9ybSAnKyBkdXJhdGlvbiArIGVzaW5nO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUudHJhbnNmb3JtJykgaG9zdFRyYW5zZm9ybTogc3RyaW5nO1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuei1pbmRleCcpIFxuICAgIGdldCBob3N0WkluZGV4KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuekluZGV4O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKSBcbiAgICBnZXQgaG9zdFdpZHRoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMud3JhcHBlcldpZHRoO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpIFxuICAgIGdldCBob3N0SGVpZ2h0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMud3JhcHBlckhlaWdodDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJykgXG4gICAgZ2V0IGhvc3RQb3NpdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mub3ZlcmxheS1zaG93bicpIGhvc3RTaG93bjogYm9vbGVhbjtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrKGV2ZW50KXtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ob3N0U2hvd24pe1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgWyckZXZlbnQnXSlcbiAgICB0cmFuc2l0aW9uRW5kKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9IFwib3ZlcmxheVwiKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgIT0gXCJvcGFjaXR5XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhvc3RTaG93bikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU92ZXJsYXlFbmQoKTtcbiAgICAgICAgICAgIC8vdGhpcy5zdGF0ZUV2ZW50cy5lbWl0KFwic2hvd25cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RTaG93biA9IHRydWU7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGVFdmVudHMuZW1pdChcImhpZGRlblwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwb3BvdmVyQ2xhc3MoKXtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5tZXRhZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm1ldGFkYXRhLnBvcG92ZXJDbGFzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSkge1xuICAgICAgICB0aGlzLmdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXR0ZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxFdmVudHMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsT3ZlcmxheSgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWwgPSB0cnVlO1xuICAgICAgICB9LCB0aGlzLm1pblRpbWVvdXQpOyAvLyBOb3RlOiBub3QgZ29vZFxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dPdmVybGF5QW5pbWF0aW9uKCk7XG4gICAgICAgIH0sIHRoaXMubWluVGltZW91dCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxPdmVybGF5KCl7XG4gICAgICAgIHRoaXMuaG9zdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcrdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRyYW5zbGF0ZVkrJyknO1xuICAgIH1cblxuICAgIHNob3dPdmVybGF5QW5pbWF0aW9uKCl7XG4gICAgICAgIHRoaXMuaG9zdE9wYWNpdHkgPSAxO1xuICAgICAgICB0aGlzLmhvc3RUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwcHgpJztcbiAgICB9XG5cbiAgICBsb2FkQ29tcG9uZW50KCkge1xuICAgICAgICBsZXQgYWRJdGVtID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGFkSXRlbS5tYWluQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmFkSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuXG4gICAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWZFbGVtZW50ID0gKDxDb21wb25lbnRQcm9wZXJ0aWVzPmNvbXBvbmVudFJlZi5sb2NhdGlvbikubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBTZXQgc3R5bGVzXG4gICAgICAgIGNvbXBvbmVudFJlZkVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLnByb3BlcnRpZXMud2lkdGg7XG4gICAgICAgIGNvbXBvbmVudFJlZkVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5wcm9wZXJ0aWVzLmhlaWdodDtcblxuICAgICAgICAvLyBTZXQgY2xhc3Nlc1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9wb3ZlckNsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmRWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMucG9wb3ZlckNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9wb3ZlckNsYXNzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ2xhc3MuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWZFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pOyBcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhc3MgcHJvcGVydGllc1xuICAgICAgICAoPENvbXBvbmVudFByb3BlcnRpZXM+Y29tcG9uZW50UmVmLmluc3RhbmNlKS5vdmVybGF5UHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjbG9zZU92ZXJsYXkoKXtcbiAgICAgICAgdGhpcy5ob3N0T3BhY2l0eSA9IDA7XG4gICAgICAgIHRoaXMuaG9zdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcrdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRyYW5zbGF0ZVkrJyknO1xuICAgIH1cblxuICAgIGNsb3NlT3ZlcmxheUVuZCgpIHtcbiAgICAgICAgdGhpcy5ob3N0U2hvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdENoYW5nZUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdbT3ZlcmxheV0gSGlkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlR2xvYmFsRXZlbnRzKGV2ZW50KXtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdIaWRlJyl7XG4gICAgICAgICAgICB0aGlzLmNsb3NlT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19