@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
196 lines • 20.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, HostListener, Input, NgModule, NgZone, Renderer2 } from '@angular/core';
import { AnimationBuilder, style, animate } from '@angular/animations';
var IgxRippleDirective = /** @class */ (function () {
function IgxRippleDirective(builder, elementRef, renderer, zone) {
this.builder = builder;
this.elementRef = elementRef;
this.renderer = renderer;
this.zone = zone;
/**
* Sets/gets the ripple target.
* ```html
* <div #rippleContainer class="div-1" igxRipple [igxRippleTarget] = "'.div-1'"></div>
* ```
* ```typescript
* @ViewChild('rippleContainer', {read: IgxRippleDirective})
* public ripple: IgxRippleDirective;
* let rippleTarget = this.ripple.rippleTarget;
* ```
* Can set the ripple to activate on a child element inside the parent where igxRipple is defined.
* ```html
* <div #rippleContainer [igxRippleTarget] = "'#child"'>
* <button id="child">Click</button>
* </div>
* ```
* @memberof IgxRippleDirective
*/
this.rippleTarget = '';
/**
* Sets/gets the ripple duration(in milliseconds).
* Default value is `600`.
* ```html
* <button #rippleContainer igxRipple [igxRippleDuration] = "800"></button>
* ```
* ```typescript
* @ViewChild('rippleContainer', {read: IgxRippleDirective})
* public ripple: IgxRippleDirective;
* let rippleDuration = this.ripple.rippleDuration;
* ```
* @memberof IgxRippleDirective
*/
this.rippleDuration = 600;
/**
* Sets/gets whether the ripple is disabled.
* Default value is `false`.
* ```html
* <button #rippleContainer igxRipple [igxRippleDisabled] = "true"></button>
* ```
* ```typescript
* @ViewChild('rippleContainer', {read: IgxRippleDirective})
* public ripple: IgxRippleDirective;
* let isRippleDisabled = this.ripple.rippleDisabled;
* ```
* @memberof IgxRippleDirective
*/
this.rippleDisabled = false;
this.rippleElementClass = 'igx-ripple__inner';
this.rippleHostClass = 'igx-ripple';
this._centered = false;
this.animationQueue = [];
}
Object.defineProperty(IgxRippleDirective.prototype, "centered", {
/**
* Enables/disables the ripple to be centered.
* ```html
* <button #rippleContainer igxRipple [igxRippleCentered] = "true"></button>
* ```
* @memberof IgxRippleDirective
*/
set: function (value) {
this._centered = value || this.centered;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxRippleDirective.prototype, "nativeElement", {
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
/**
*@hidden
*/
IgxRippleDirective.prototype.onMouseDown = function (event) {
var _this = this;
this.zone.runOutsideAngular(function () { return _this._ripple(event); });
};
IgxRippleDirective.prototype.setStyles = function (rippleElement, styleParams) {
this.renderer.addClass(rippleElement, this.rippleElementClass);
this.renderer.setStyle(rippleElement, 'width', styleParams.radius + "px");
this.renderer.setStyle(rippleElement, 'height', styleParams.radius + "px");
this.renderer.setStyle(rippleElement, 'top', styleParams.top + "px");
this.renderer.setStyle(rippleElement, 'left', styleParams.left + "px");
if (this.rippleColor) {
this.renderer.setStyle(rippleElement, 'background', this.rippleColor);
}
};
IgxRippleDirective.prototype._ripple = function (event) {
var _this = this;
if (this.rippleDisabled) {
return;
}
var target = (this.rippleTarget ? this.nativeElement.querySelector(this.rippleTarget) || this.nativeElement : this.nativeElement);
var rectBounds = target.getBoundingClientRect();
var radius = Math.max(rectBounds.width, rectBounds.height);
var left = event.clientX - rectBounds.left - radius / 2;
var top = event.clientY - rectBounds.top - radius / 2;
if (this._centered) {
left = top = 0;
}
var dimensions = {
radius: radius,
top: top,
left: left
};
var rippleElement = this.renderer.createElement('span');
this.setStyles(rippleElement, dimensions);
this.renderer.addClass(target, this.rippleHostClass);
this.renderer.appendChild(target, rippleElement);
var animation = this.builder.build([
style({ opacity: 0.5, transform: 'scale(.3)' }),
animate(this.rippleDuration, style({ opacity: 0, transform: 'scale(2)' }))
]).create(rippleElement);
this.animationQueue.push(animation);
animation.onDone(function () {
_this.animationQueue.splice(_this.animationQueue.indexOf(animation), 1);
target.removeChild(rippleElement);
if (_this.animationQueue.length < 1) {
_this.renderer.removeClass(target, _this.rippleHostClass);
}
});
animation.play();
};
IgxRippleDirective.ctorParameters = function () { return [
{ type: AnimationBuilder },
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgZone }
]; };
__decorate([
Input('igxRippleTarget'),
__metadata("design:type", Object)
], IgxRippleDirective.prototype, "rippleTarget", void 0);
__decorate([
Input('igxRipple'),
__metadata("design:type", String)
], IgxRippleDirective.prototype, "rippleColor", void 0);
__decorate([
Input('igxRippleDuration'),
__metadata("design:type", Object)
], IgxRippleDirective.prototype, "rippleDuration", void 0);
__decorate([
Input('igxRippleCentered'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], IgxRippleDirective.prototype, "centered", null);
__decorate([
Input('igxRippleDisabled'),
__metadata("design:type", Object)
], IgxRippleDirective.prototype, "rippleDisabled", void 0);
__decorate([
HostListener('mousedown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], IgxRippleDirective.prototype, "onMouseDown", null);
IgxRippleDirective = __decorate([
Directive({
selector: '[igxRipple]'
}),
__metadata("design:paramtypes", [AnimationBuilder,
ElementRef,
Renderer2,
NgZone])
], IgxRippleDirective);
return IgxRippleDirective;
}());
export { IgxRippleDirective };
/**
* @hidden
*/
var IgxRippleModule = /** @class */ (function () {
function IgxRippleModule() {
}
IgxRippleModule = __decorate([
NgModule({
declarations: [IgxRippleDirective],
exports: [IgxRippleDirective]
})
], IgxRippleModule);
return IgxRippleModule;
}());
export { IgxRippleModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBS3ZFO0lBcUZJLDRCQUNjLE9BQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ3JCLElBQVk7UUFIVixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQXhGeEI7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBaUJHO1FBRUksaUJBQVksR0FBRyxFQUFFLENBQUM7UUFlekI7Ozs7Ozs7Ozs7OztXQVlHO1FBRUksbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFXNUI7Ozs7Ozs7Ozs7OztXQVlHO1FBRUksbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFNdEIsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUM7UUFDekMsb0JBQWUsR0FBRyxZQUFZLENBQUM7UUFDL0IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztJQU1BLENBQUM7SUFoQ0Qsc0JBQUksd0NBQVE7UUFQeEM7Ozs7OztXQU1HO2FBQ3lCLFVBQWEsS0FBYztZQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzVDLENBQUM7OztPQUFBO0lBaUJELHNCQUFjLDZDQUFh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QUFDLFFBQVEsQ0FBQyxDQUFDOzs7O3lEQUdyQztJQWhHUSxrQkFBa0I7UUFIOUIsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGFBQWE7U0FDMUIsQ0FBQzt5Q0F1RnlCLGdCQUFnQjtZQUNiLFVBQVU7WUFDWixTQUFTO1lBQ2YsTUFBTTtPQXpGZixrQkFBa0IsQ0EySjlCO0lBQUQseUJBQUM7Q0FBQSxBQTNKRCxJQTJKQztTQTNKWSxrQkFBa0I7QUE2Si9COztHQUVHO0FBS0g7SUFBQTtJQUErQixDQUFDO0lBQW5CLGVBQWU7UUFKM0IsUUFBUSxDQUFDO1lBQ04sWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDbEMsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7U0FDaEMsQ0FBQztPQUNXLGVBQWUsQ0FBSTtJQUFELHNCQUFDO0NBQUEsQUFBaEMsSUFBZ0M7U0FBbkIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgTmdNb2R1bGUsIE5nWm9uZSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmltYXRpb25CdWlsZGVyLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hSaXBwbGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hSaXBwbGVEaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcmlwcGxlIHRhcmdldC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdiAgI3JpcHBsZUNvbnRhaW5lciBjbGFzcz1cImRpdi0xXCIgaWd4UmlwcGxlIFtpZ3hSaXBwbGVUYXJnZXRdID0gXCInLmRpdi0xJ1wiPjwvZGl2PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdyaXBwbGVDb250YWluZXInLCB7cmVhZDogSWd4UmlwcGxlRGlyZWN0aXZlfSlcbiAgICAgKiBwdWJsaWMgcmlwcGxlOiBJZ3hSaXBwbGVEaXJlY3RpdmU7XG4gICAgICogbGV0IHJpcHBsZVRhcmdldCA9IHRoaXMucmlwcGxlLnJpcHBsZVRhcmdldDtcbiAgICAgKiBgYGBcbiAgICAgKiBDYW4gc2V0IHRoZSByaXBwbGUgdG8gYWN0aXZhdGUgb24gYSBjaGlsZCBlbGVtZW50IGluc2lkZSB0aGUgcGFyZW50IHdoZXJlIGlneFJpcHBsZSBpcyBkZWZpbmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2ICNyaXBwbGVDb250YWluZXIgW2lneFJpcHBsZVRhcmdldF0gPSBcIicjY2hpbGRcIic+XG4gICAgICogIDxidXR0b24gaWQ9XCJjaGlsZFwiPkNsaWNrPC9idXR0b24+XG4gICAgICogPC9kaXY+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFJpcHBsZURpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4UmlwcGxlVGFyZ2V0JylcbiAgICBwdWJsaWMgcmlwcGxlVGFyZ2V0ID0gJyc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSByaXBwbGUgY29sb3IuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gI3JpcHBsZUNvbnRhaW5lciBbaWd4UmlwcGxlXSA9IFwiJ3JlZCdcIiA+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ3JpcHBsZUNvbnRhaW5lcicsIHtyZWFkOiBJZ3hSaXBwbGVEaXJlY3RpdmV9KVxuICAgICAqIHB1YmxpYyByaXBwbGU6IElneFJpcHBsZURpcmVjdGl2ZTtcbiAgICAgKiBsZXQgcmlwcGxlQ29sb3IgPSB0aGlzLnJpcHBsZS5yaXBwbGVDb2xvcjtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGUnKVxuICAgIHB1YmxpYyByaXBwbGVDb2xvcjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcmlwcGxlIGR1cmF0aW9uKGluIG1pbGxpc2Vjb25kcykuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgNjAwYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiAjcmlwcGxlQ29udGFpbmVyIGlneFJpcHBsZSBbaWd4UmlwcGxlRHVyYXRpb25dID0gXCI4MDBcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgncmlwcGxlQ29udGFpbmVyJywge3JlYWQ6IElneFJpcHBsZURpcmVjdGl2ZX0pXG4gICAgICogcHVibGljIHJpcHBsZTogSWd4UmlwcGxlRGlyZWN0aXZlO1xuICAgICAqIGxldCByaXBwbGVEdXJhdGlvbiA9IHRoaXMucmlwcGxlLnJpcHBsZUR1cmF0aW9uO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hSaXBwbGVEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFJpcHBsZUR1cmF0aW9uJylcbiAgICBwdWJsaWMgcmlwcGxlRHVyYXRpb24gPSA2MDA7XG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9kaXNhYmxlcyB0aGUgcmlwcGxlIHRvIGJlIGNlbnRlcmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uICNyaXBwbGVDb250YWluZXIgaWd4UmlwcGxlIFtpZ3hSaXBwbGVDZW50ZXJlZF0gPSBcInRydWVcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVDZW50ZXJlZCcpIHNldCBjZW50ZXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jZW50ZXJlZCA9IHZhbHVlIHx8IHRoaXMuY2VudGVyZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uICNyaXBwbGVDb250YWluZXIgaWd4UmlwcGxlIFtpZ3hSaXBwbGVEaXNhYmxlZF0gPSBcInRydWVcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgncmlwcGxlQ29udGFpbmVyJywge3JlYWQ6IElneFJpcHBsZURpcmVjdGl2ZX0pXG4gICAgICogcHVibGljIHJpcHBsZTogSWd4UmlwcGxlRGlyZWN0aXZlO1xuICAgICAqIGxldCBpc1JpcHBsZURpc2FibGVkID0gdGhpcy5yaXBwbGUucmlwcGxlRGlzYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFJpcHBsZURpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4UmlwcGxlRGlzYWJsZWQnKVxuICAgIHB1YmxpYyByaXBwbGVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmlwcGxlRWxlbWVudENsYXNzID0gJ2lneC1yaXBwbGVfX2lubmVyJztcbiAgICBwcml2YXRlIHJpcHBsZUhvc3RDbGFzcyA9ICdpZ3gtcmlwcGxlJztcbiAgICBwcml2YXRlIF9jZW50ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYW5pbWF0aW9uUXVldWUgPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgYnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSkgeyB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuX3JpcHBsZShldmVudCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3R5bGVzKHJpcHBsZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdHlsZVBhcmFtczogYW55KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MocmlwcGxlRWxlbWVudCwgdGhpcy5yaXBwbGVFbGVtZW50Q2xhc3MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICd3aWR0aCcsIGAke3N0eWxlUGFyYW1zLnJhZGl1c31weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICdoZWlnaHQnLCBgJHtzdHlsZVBhcmFtcy5yYWRpdXN9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaXBwbGVFbGVtZW50LCAndG9wJywgYCR7c3R5bGVQYXJhbXMudG9wfXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmlwcGxlRWxlbWVudCwgJ2xlZnQnLCBgJHtzdHlsZVBhcmFtcy5sZWZ0fXB4YCk7XG4gICAgICAgIGlmICh0aGlzLnJpcHBsZUNvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgdGhpcy5yaXBwbGVDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yaXBwbGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucmlwcGxlRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICh0aGlzLnJpcHBsZVRhcmdldCA/IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMucmlwcGxlVGFyZ2V0KSB8fCB0aGlzLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IHJlY3RCb3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGgubWF4KHJlY3RCb3VuZHMud2lkdGgsIHJlY3RCb3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgbGV0IGxlZnQgPSBldmVudC5jbGllbnRYIC0gcmVjdEJvdW5kcy5sZWZ0IC0gcmFkaXVzIC8gMjtcbiAgICAgICAgbGV0IHRvcCA9IGV2ZW50LmNsaWVudFkgLSByZWN0Qm91bmRzLnRvcCAtIHJhZGl1cyAvIDI7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NlbnRlcmVkKSB7XG4gICAgICAgICAgICBsZWZ0ID0gdG9wID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICByYWRpdXMsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBsZWZ0XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmlwcGxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gICAgICAgIHRoaXMuc2V0U3R5bGVzKHJpcHBsZUVsZW1lbnQsIGRpbWVuc2lvbnMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRhcmdldCwgdGhpcy5yaXBwbGVIb3N0Q2xhc3MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRhcmdldCwgcmlwcGxlRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uID0gdGhpcy5idWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMC41LCB0cmFuc2Zvcm06ICdzY2FsZSguMyknIH0pLFxuICAgICAgICAgICAgYW5pbWF0ZSh0aGlzLnJpcHBsZUR1cmF0aW9uLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDIpJyB9KSlcbiAgICAgICAgXSkuY3JlYXRlKHJpcHBsZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uUXVldWUucHVzaChhbmltYXRpb24pO1xuXG4gICAgICAgIGFuaW1hdGlvbi5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25RdWV1ZS5zcGxpY2UodGhpcy5hbmltYXRpb25RdWV1ZS5pbmRleE9mKGFuaW1hdGlvbiksIDEpO1xuICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUNoaWxkKHJpcHBsZUVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uUXVldWUubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGFyZ2V0LCB0aGlzLnJpcHBsZUhvc3RDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFuaW1hdGlvbi5wbGF5KCk7XG5cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJpcHBsZURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0lneFJpcHBsZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmlwcGxlTW9kdWxlIHsgfVxuIl19