angular-gallery
Version:
Responsive gallery for Angular with touch screen support.
211 lines • 22.4 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';
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