angular-gallery
Version:
Responsive gallery for Angular with touch screen support.
179 lines • 20.1 kB
JavaScript
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';
let OverlayContainerComponent = class OverlayContainerComponent {
constructor(componentFactoryResolver, elementRef, eventService) {
this.componentFactoryResolver = componentFactoryResolver;
this.elementRef = elementRef;
this.eventService = eventService;
this.overlayBackdrop = true;
this.minTimeout = 30;
this._hostOpacity = 0;
this.globalEventsSubscription = this.eventService.emitter.subscribe((event) => {
this.handleGlobalEvents(event);
});
}
get hostOpacity() {
return this.properties.fadeIn ? this._hostOpacity : 1;
}
set hostOpacity(value) {
this._hostOpacity = value;
}
get hostTransition() {
const duration = this.properties.animationDuration + 'ms ';
const esing = this.properties.animationTimingFunction;
return 'opacity ' + duration + esing + ', transform ' + duration + esing;
}
get hostZIndex() {
return this.properties.zIndex;
}
get hostWidth() {
return this.properties.wrapperWidth;
}
get hostHeight() {
return this.properties.wrapperHeight;
}
get hostPosition() {
return this.properties.position;
}
onClick(event) {
if (!this.elementRef.nativeElement.contains(event.target)) {
if (this.hostShown) {
this.closeOverlay();
}
}
}
transitionEnd(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");
}
}
get popoverClass() {
if (this.properties.metadata) {
return this.properties.metadata.popoverClass;
}
}
ngOnInit() {
this.loadComponent();
this.initialOverlay();
setTimeout(() => {
this.isInitial = true;
}, this.minTimeout); // Note: not good
}
ngAfterViewInit() {
setTimeout(() => {
this.showOverlayAnimation();
}, this.minTimeout);
}
ngOnDestroy() {
if (this.globalEventsSubscription) {
this.globalEventsSubscription.unsubscribe();
}
}
initialOverlay() {
this.hostTransform = 'translateY(' + this.properties.animationTranslateY + ')';
}
showOverlayAnimation() {
this.hostOpacity = 1;
this.hostTransform = 'translateY(0px)';
}
loadComponent() {
let adItem = this.properties;
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(adItem.mainComponent);
let viewContainerRef = this.adHost.viewContainerRef;
viewContainerRef.clear();
let componentRef = viewContainerRef.createComponent(componentFactory);
let 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;
}
closeOverlay() {
this.hostOpacity = 0;
this.hostTransform = 'translateY(' + this.properties.animationTranslateY + ')';
}
closeOverlayEnd() {
this.hostShown = false;
this.eventService.emitChangeEvent({
type: '[Overlay] Hide'
});
}
handleGlobalEvents(event) {
if (event.type === 'Hide') {
this.closeOverlay();
}
}
};
OverlayContainerComponent.ctorParameters = () => [
{ 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);
export { OverlayContainerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1nYWxsZXJ5LyIsInNvdXJjZXMiOlsibGliL292ZXJsYXkvb3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUM1RyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzdDLElBQWEseUJBQXlCLEdBQXRDLE1BQWEseUJBQXlCO0lBa0ZsQyxZQUNZLHdCQUFrRCxFQUNuRCxVQUFzQixFQUNyQixZQUEwQjtRQUYxQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ25ELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFsRi9CLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFpRnJCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQy9ELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBL0VELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0Qs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LFFBQVEsRUFBRSxTQUFTO1FBQ25CLG9ZQUFpRDs7S0FFcEQsQ0FBQztHQUVXLHlCQUF5QixDQXdLckM7U0F4S1kseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBZERpcmVjdGl2ZSB9IGZyb20gJy4vYWQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbXBvbmVudFByb3BlcnRpZXMsIE92ZXJsYXlQcm9wZXJ0aWVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdvdmVybGF5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3ZlcmxheS1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL292ZXJsYXktY29udGFpbmVyLmNvbXBvbmVudC5zYXNzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwdWJsaWMgaXNJbml0aWFsOiBib29sZWFuO1xuICAgIGdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgb3ZlcmxheUJhY2tkcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgICBtaW5UaW1lb3V0OiBudW1iZXIgPSAzMDtcbiAgICBfaG9zdE9wYWNpdHk6IG51bWJlciA9IDA7XG5cbiAgICBAVmlld0NoaWxkKEFkRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSkgYWRIb3N0OiBBZERpcmVjdGl2ZTtcblxuICAgIEBJbnB1dCgpIHByb3BlcnRpZXM6IE92ZXJsYXlQcm9wZXJ0aWVzO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5vcGFjaXR5JylcbiAgICBnZXQgaG9zdE9wYWNpdHkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5mYWRlSW4gPyB0aGlzLl9ob3N0T3BhY2l0eSA6IDE7XG4gICAgfVxuICAgIHNldCBob3N0T3BhY2l0eSh2YWx1ZSl7XG4gICAgICAgIHRoaXMuX2hvc3RPcGFjaXR5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS50cmFuc2l0aW9uJylcbiAgICBnZXQgaG9zdFRyYW5zaXRpb24oKXtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BlcnRpZXMuYW5pbWF0aW9uRHVyYXRpb24rJ21zICc7XG4gICAgICAgIGNvbnN0IGVzaW5nID0gdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uO1xuICAgICAgICByZXR1cm4gJ29wYWNpdHkgJysgZHVyYXRpb24gKyBlc2luZyArICcsIHRyYW5zZm9ybSAnKyBkdXJhdGlvbiArIGVzaW5nO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUudHJhbnNmb3JtJykgaG9zdFRyYW5zZm9ybTogc3RyaW5nO1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuei1pbmRleCcpIFxuICAgIGdldCBob3N0WkluZGV4KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuekluZGV4O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKSBcbiAgICBnZXQgaG9zdFdpZHRoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMud3JhcHBlcldpZHRoO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpIFxuICAgIGdldCBob3N0SGVpZ2h0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMud3JhcHBlckhlaWdodDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJykgXG4gICAgZ2V0IGhvc3RQb3NpdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mub3ZlcmxheS1zaG93bicpIGhvc3RTaG93bjogYm9vbGVhbjtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrKGV2ZW50KXtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ob3N0U2hvd24pe1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgWyckZXZlbnQnXSlcbiAgICB0cmFuc2l0aW9uRW5kKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9IFwib3ZlcmxheVwiKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgIT0gXCJvcGFjaXR5XCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhvc3RTaG93bikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU92ZXJsYXlFbmQoKTtcbiAgICAgICAgICAgIC8vdGhpcy5zdGF0ZUV2ZW50cy5lbWl0KFwic2hvd25cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RTaG93biA9IHRydWU7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGVFdmVudHMuZW1pdChcImhpZGRlblwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwb3BvdmVyQ2xhc3MoKXtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5tZXRhZGF0YSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm1ldGFkYXRhLnBvcG92ZXJDbGFzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSkge1xuICAgICAgICB0aGlzLmdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXR0ZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxFdmVudHMoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsT3ZlcmxheSgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWwgPSB0cnVlO1xuICAgICAgICB9LCB0aGlzLm1pblRpbWVvdXQpOyAvLyBOb3RlOiBub3QgZ29vZFxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dPdmVybGF5QW5pbWF0aW9uKCk7XG4gICAgICAgIH0sIHRoaXMubWluVGltZW91dCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmdsb2JhbEV2ZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxPdmVybGF5KCl7XG4gICAgICAgIHRoaXMuaG9zdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcrdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRyYW5zbGF0ZVkrJyknO1xuICAgIH1cblxuICAgIHNob3dPdmVybGF5QW5pbWF0aW9uKCl7XG4gICAgICAgIHRoaXMuaG9zdE9wYWNpdHkgPSAxO1xuICAgICAgICB0aGlzLmhvc3RUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwcHgpJztcbiAgICB9XG5cbiAgICBsb2FkQ29tcG9uZW50KCkge1xuICAgICAgICBsZXQgYWRJdGVtID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGFkSXRlbS5tYWluQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmFkSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuXG4gICAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWZFbGVtZW50ID0gKDxDb21wb25lbnRQcm9wZXJ0aWVzPmNvbXBvbmVudFJlZi5sb2NhdGlvbikubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBTZXQgc3R5bGVzXG4gICAgICAgIGNvbXBvbmVudFJlZkVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLnByb3BlcnRpZXMud2lkdGg7XG4gICAgICAgIGNvbXBvbmVudFJlZkVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5wcm9wZXJ0aWVzLmhlaWdodDtcblxuICAgICAgICAvLyBTZXQgY2xhc3Nlc1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9wb3ZlckNsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmRWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMucG9wb3ZlckNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9wb3ZlckNsYXNzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ2xhc3MuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWZFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pOyBcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhc3MgcHJvcGVydGllc1xuICAgICAgICAoPENvbXBvbmVudFByb3BlcnRpZXM+Y29tcG9uZW50UmVmLmluc3RhbmNlKS5vdmVybGF5UHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjbG9zZU92ZXJsYXkoKXtcbiAgICAgICAgdGhpcy5ob3N0T3BhY2l0eSA9IDA7XG4gICAgICAgIHRoaXMuaG9zdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKCcrdGhpcy5wcm9wZXJ0aWVzLmFuaW1hdGlvblRyYW5zbGF0ZVkrJyknO1xuICAgIH1cblxuICAgIGNsb3NlT3ZlcmxheUVuZCgpIHtcbiAgICAgICAgdGhpcy5ob3N0U2hvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdENoYW5nZUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdbT3ZlcmxheV0gSGlkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlR2xvYmFsRXZlbnRzKGV2ZW50KXtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdIaWRlJyl7XG4gICAgICAgICAgICB0aGlzLmNsb3NlT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19