@junte/ui
Version:
Quality Angular UI components kit
210 lines • 24 kB
JavaScript
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';
var ANIMATION_CLOSE_DURATION = 300;
var BACKDROP_FILTER = 'blur(5px)';
var ModalState;
(function (ModalState) {
ModalState["hidden"] = "hidden";
ModalState["visible"] = "visible";
})(ModalState || (ModalState = {}));
var ModalOptions = /** @class */ (function () {
function ModalOptions(defs) {
if (defs === void 0) { defs = null; }
this.maxWidth = '800';
this.maxHeight = '600';
this.hold = false;
this.animation = true;
Object.assign(this, defs);
}
return ModalOptions;
}());
export { ModalOptions };
var Display;
(function (Display) {
Display["block"] = "block";
Display["none"] = "none";
})(Display || (Display = {}));
var ModalComponent = /** @class */ (function () {
function ModalComponent(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;
}
Object.defineProperty(ModalComponent.prototype, "opened", {
get: function () {
return this._opened;
},
set: function (opened) {
this._opened = opened;
this.opened$.emit(opened);
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "windows", {
get: function () {
return this.device.platform.windows;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "content", {
set: function (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);
}
},
enumerable: true,
configurable: true
});
ModalComponent.prototype.start = function (event) {
if (event.fromState === ModalState.hidden) {
this.display = Display.block;
}
};
ModalComponent.prototype.done = function (event) {
if (event.toState === ModalState.hidden) {
this.display = Display.none;
}
};
// TODO: options to type with optionals?.
ModalComponent.prototype.open = function (content, options) {
if (options === void 0) { 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;
};
ModalComponent.prototype.close = function () {
var _this = this;
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(function () {
_this.content = null;
_this.renderer.removeStyle(_this.backdrop.nativeElement, 'animation');
}, ANIMATION_CLOSE_DURATION);
};
ModalComponent.ctorParameters = function () { return [
{ 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);
return ModalComponent;
}());
export { ModalComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL292ZXJsYXlzL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRS9FLElBQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLElBQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQztBQUVwQyxJQUFLLFVBR0o7QUFIRCxXQUFLLFVBQVU7SUFDYiwrQkFBaUIsQ0FBQTtJQUNqQixpQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSEksVUFBVSxLQUFWLFVBQVUsUUFHZDtBQU9EO0lBVUUsc0JBQVksSUFBa0M7UUFBbEMscUJBQUEsRUFBQSxXQUFrQztRQVI5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUliLGNBQVMsR0FBRyxJQUFJ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Q3hELENBQ0Y7b0JBQ0QsVUFBVSxDQUNSLG1CQUFtQixFQUNuQjt3QkFDRSxPQUFPLENBQUMsOENBQThDLENBQUM7cUJBQ3hELENBQ0Y7aUJBQ0YsQ0FDRjtnQkFFRCxPQUFPLENBQUMsVUFBVSxFQUFFO29CQUNoQixLQUFLLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQzt3QkFDSixPQUFPLEVBQUUsQ0FBQztxQkFDWCxDQUFDLENBQ0g7b0JBQ0QsS0FBSyxDQUNILEdBQUcsRUFDSCxLQUFLLENBQUM7d0JBQ0osT0FBTyxFQUFFLENBQUM7cUJBQ1gsQ0FBQyxDQUNIO29CQUNELFVBQVUsQ0FDUixZQUFZLEVBQ1o7d0JBQ0UsT0FBTyxDQUFDLGlCQUFpQixDQUFDO3FCQUMzQixDQUNGO2lCQUNGLENBQ0Y7YUFDRjtTQUNGLENBQUM7eUNBbUQ4QixTQUFTO1lBQ1YsVUFBVTtZQUNQLGlCQUFpQjtZQUN0QixhQUFhO09BcEQ3QixjQUFjLENBa0cxQjtJQUFELHFCQUFDO0NBQUEsQUFsR0QsSUFrR0M7U0FsR1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50LCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbGF5b3V0L3Jlc3BvbnNpdmUvZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWV0aG9kQXBpIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9icmVha3BvaW50JztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uL2xheW91dC9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5cbmNvbnN0IEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTiA9IDMwMDtcbmNvbnN0IEJBQ0tEUk9QX0ZJTFRFUiA9ICdibHVyKDVweCknO1xuXG5lbnVtIE1vZGFsU3RhdGUge1xuICBoaWRkZW4gPSAnaGlkZGVuJyxcbiAgdmlzaWJsZSA9ICd2aXNpYmxlJ1xufVxuXG5pbnRlcmZhY2UgTW9kYWxUaXRsZSB7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RhbE9wdGlvbnMge1xuXG4gIG1heFdpZHRoID0gJzgwMCc7XG4gIG1heEhlaWdodCA9ICc2MDAnO1xuICBob2xkID0gZmFsc2U7XG4gIHRpdGxlPzogTW9kYWxUaXRsZTtcbiAgZm9vdGVyPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgY29udGVudD86IFRlbXBsYXRlUmVmPGFueT47XG4gIGFuaW1hdGlvbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoZGVmczogUGFydGlhbDxNb2RhbE9wdGlvbnM+ID0gbnVsbCkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGVmcyk7XG4gIH1cblxufVxuXG5leHBvcnQgdHlwZSBNb2RhbENvbnRlbnQgPSBUZW1wbGF0ZVJlZjxhbnk+IHwgQ29tcG9uZW50UmVmPGFueT47XG5cbmVudW0gRGlzcGxheSB7XG4gIGJsb2NrID0gJ2Jsb2NrJyxcbiAgbm9uZSA9ICdub25lJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuZW5jYXBzdWxhdGVkLmh0bWwnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignbW92ZScsIFtcbiAgICAgICAgc3RhdGUoXG4gICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICBsZWZ0OiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAwKScsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgc3RhdGUoXG4gICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICBsZWZ0OiAnNTAlJyxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAnaGlkZGVuID0+IHZpc2libGUnLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJy41cyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApJylcbiAgICAgICAgICBdLFxuICAgICAgICApLFxuICAgICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAgICd2aXNpYmxlID0+IGhpZGRlbicsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnLjNzIGN1YmljLWJlemllcigwLjE2NSwgMC44NDAsIDAuNDQwLCAxLjAwMCknKVxuICAgICAgICAgIF0sXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcblxuICAgIHRyaWdnZXIoJ2JsYWNrb3V0JywgW1xuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAndm9pZCcsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAnKicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAgICd2b2lkIDw9PiAqJyxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBhbmltYXRlKCcuNXMgZWFzZS1pbi1vdXQnKVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgIF1cbiAgICApLFxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQge1xuXG4gIHByaXZhdGUgX29wZW5lZDogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpIHJlYWRvbmx5IGhvc3QgPSAnam50LW1vZGFsLWhvc3QnO1xuXG4gIHVpID0gVUk7XG4gIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3B0aW9uczogTW9kYWxPcHRpb25zID0gbmV3IE1vZGFsT3B0aW9ucygpO1xuICBtb2JpbGU6IGJvb2xlYW4gPSB0aGlzLmJyZWFrcG9pbnQuY3VycmVudCA9PT0gQnJlYWtwb2ludC5tb2JpbGU7XG5cbiAgQElucHV0KClcbiAgYmFja2Ryb3A6IEVsZW1lbnRSZWY7XG5cbiAgQE91dHB1dCgpXG4gIG9wZW5lZCQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBjb250YWluZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgZGlzcGxheSA9IERpc3BsYXkubm9uZTtcblxuICBASW5wdXQoKVxuICBzZXQgb3BlbmVkKG9wZW5lZDogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW5lZCA9IG9wZW5lZDtcbiAgICB0aGlzLm9wZW5lZCQuZW1pdChvcGVuZWQpO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2luZG93cycpXG4gIGdldCB3aW5kb3dzKCkge1xuICAgIHJldHVybiB0aGlzLmRldmljZS5wbGF0Zm9ybS53aW5kb3dzO1xuICB9XG5cbiAgc2V0IGNvbnRlbnQoY29udGVudDogTW9kYWxDb250ZW50KSB7XG4gICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBudWxsO1xuICAgIHRoaXMuY29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgQ29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5pbnNlcnQoY29udGVudC5ob3N0VmlldywgMCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgYnJlYWtwb2ludDogQnJlYWtwb2ludFNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBkZXZpY2U6IERldmljZVNlcnZpY2UpIHtcbiAgfVxuXG4gIHN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09IE1vZGFsU3RhdGUuaGlkZGVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXkgPSBEaXNwbGF5LmJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIGRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09IE1vZGFsU3RhdGUuaGlkZGVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXkgPSBEaXNwbGF5Lm5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogb3B0aW9ucyB0byB0eXBlIHdpdGggb3B0aW9uYWxzPy5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdzaG93IG1vZGFsJ30pXG4gIG9wZW4oY29udGVudDogTW9kYWxDb250ZW50LCBvcHRpb25zOiBQYXJ0aWFsPE1vZGFsT3B0aW9ucz4gPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBNb2RhbE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICBpZiAoISF0aGlzLmJhY2tkcm9wKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2ZpbHRlcicsIEJBQ0tEUk9QX0ZJTFRFUik7XG4gICAgICBpZiAoIXRoaXMubW9iaWxlICYmIHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmJhY2tkcm9wLm5hdGl2ZUVsZW1lbnQsICdhbmltYXRpb24nLCAnam50LXNjYWxlLWluIC41cyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApIGZvcndhcmRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIEBNZXRob2RBcGkoe2Rlc2NyaXB0aW9uOiAnY2xvc2UgbW9kYWwnfSlcbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICBpZiAoISF0aGlzLmJhY2tkcm9wKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2ZpbHRlcicpO1xuICAgICAgaWYgKCF0aGlzLm1vYmlsZSAmJiB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5iYWNrZHJvcC5uYXRpdmVFbGVtZW50LCAnYW5pbWF0aW9uJywgJ2pudC1zY2FsZS1vdXQgJyArIEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTiArICdtcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQwLCAwLjQ0MCwgMS4wMDApIGZvcndhcmRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGVudCA9IG51bGw7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuYmFja2Ryb3AubmF0aXZlRWxlbWVudCwgJ2FuaW1hdGlvbicpO1xuICAgIH0sIEFOSU1BVElPTl9DTE9TRV9EVVJBVElPTik7XG4gIH1cbn1cbiJdfQ==