@fivethree/core
Version:
Fivethree Core Components
276 lines • 27.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/feature-discovery/feature-discovery.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Platform } from '@ionic/angular';
import { Component, ViewChild, ElementRef, Renderer2, Output, EventEmitter, HostBinding } from '@angular/core';
import { trigger, transition, animate, style } from '@angular/animations';
export class FivFeatureDiscovery {
/**
* @param {?} renderer
* @param {?} platform
*/
constructor(renderer, platform) {
this.renderer = renderer;
this.platform = platform;
this.top = 0;
this.left = 0;
this.width = 420;
this.height = 420;
this.innerDiameter = 0;
this.featurePadding = 0;
this.contentTop = 0;
this.contentLeft = 0;
this.contentWidth = 0;
this.contentHeight = 0;
this.contentOffset = 0;
this.animationState = 'hidden';
this.pulse = 'small';
this.fivClick = new EventEmitter();
this.fivBackdropClick = new EventEmitter();
this.fivClose = new EventEmitter();
this.fivOpen = new EventEmitter();
this.fivAnimation = new EventEmitter();
}
/**
* @return {?}
*/
get _classes() {
return this.classes.join(' ');
}
/**
* @return {?}
*/
ngOnInit() { }
/**
* @return {?}
*/
ngAfterContentInit() { }
/**
* @param {?} bounds
* @return {?}
*/
setBounds(bounds) {
this.bounds = bounds;
this.innerDiameter =
bounds.height > bounds.width ? bounds.height : bounds.width;
this.top = bounds.top + bounds.height / 2 - this.height / 2;
this.left = bounds.left + bounds.width / 2 - this.width / 2;
this.calculateContentBounds();
if (!this.icon) {
/** @type {?} */
const gradient = `-webkit-radial-gradient(transparent ${this
.innerDiameter /
2 +
5}px, var(--fiv-color-feature) ${this.innerDiameter / 2 + 5}px)`;
/** @type {?} */
const pulseGradient = `-webkit-radial-gradient(transparent ${this
.innerDiameter /
2 +
5}px, var(--fiv-color-pulse) ${this.innerDiameter / 2 + 5}px)`;
this.renderer.setStyle(this.circle.nativeElement, 'background', gradient);
this.renderer.setStyle(this.innerPulse.nativeElement, 'background', pulseGradient);
this.renderer.setStyle(this.outerPulse.nativeElement, 'background', pulseGradient);
}
}
/**
* @return {?}
*/
calculateContentBounds() {
/** @type {?} */
const absoluteCenter = {
x: this.platform.width() / 2,
y: this.platform.height() / 2
};
/** @type {?} */
const center = {
x: this.left + this.width / 2,
y: this.top + this.width / 2
};
/** @type {?} */
const rectWidth = Math.sqrt(Math.pow(this.width, 2) / 2);
/** @type {?} */
const isTop = center.y < absoluteCenter.y;
/** @type {?} */
const isLeft = center.x < absoluteCenter.x;
/** @type {?} */
const innerRadius = this.innerDiameter / 2;
/** @type {?} */
const padding = this.featurePadding / 2;
/** @type {?} */
let contentRight = 0;
/** @type {?} */
let contentBottom = 0;
if (isLeft) {
this.contentLeft = center.x - innerRadius;
contentRight = Math.min(center.x + rectWidth / 2 + this.contentOffset, this.platform.width());
}
else {
this.contentLeft = Math.max(center.x - rectWidth / 2 - this.contentOffset, 0);
contentRight = center.x + innerRadius;
}
if (isTop) {
this.contentTop = center.y + innerRadius + padding;
contentBottom = center.y + rectWidth / 2 + -1 * this.contentOffset;
}
else {
this.contentTop = center.y - rectWidth / 2 + this.contentOffset;
contentBottom = center.y - innerRadius - padding;
}
this.contentWidth = Math.abs(this.contentLeft - contentRight);
this.contentHeight = Math.abs(this.contentTop - contentBottom);
}
/**
* @param {?} event
* @return {?}
*/
handleCircleAnimation(event) {
this.fivAnimation.emit(event);
if (event.toState === 'visible') {
this.fivOpen.emit();
}
if (event.fromState === 'visible' && event.toState === 'hidden') {
this.fivClose.emit();
}
if (event.fromState === 'visible' && event.toState === 'execute') {
this.fivClose.emit();
}
}
/**
* @return {?}
*/
show() {
this.animationState = 'visible';
}
/**
* @return {?}
*/
hide() {
this.animationState = 'hidden';
}
/**
* @return {?}
*/
featureClick() {
this.animationState = 'execute';
}
/**
* @param {?} icon
* @return {?}
*/
setIcon(icon) {
if (icon) {
this.icon = icon.name;
}
}
}
FivFeatureDiscovery.decorators = [
{ type: Component, args: [{
selector: 'fiv-feature-discovery',
template: "<div class=\"backdrop\" (click)=\"fivBackdropClick.emit()\"></div>\n<div [@scale]=\"animationState\" (@scale.done)=\"handleCircleAnimation($event)\" #circle class=\"circle\"\n [style.height]=\"height + 'px'\" [style.width]=\"width + 'px'\" [style.top]=\"top + 'px'\" [style.left]=\"left + 'px'\">\n <div #pOuter class=\"feature center pulse\" [style.height]=\"(innerDiameter + featurePadding) + 'px'\"\n [style.width]=\"(innerDiameter + featurePadding) + 'px'\">\n </div>\n <div #pInner class=\"feature center inner ion-activatable\" (click)=\"fivClick.emit($event)\"\n [style.height]=\"(innerDiameter + (icon ? featurePadding : 0)) + 'px'\"\n [style.width]=\"(innerDiameter + (icon ? featurePadding : 0)) + 'px'\">\n <fiv-icon class=\"center\" *ngIf=\"icon\" [name]=\"icon\"></fiv-icon>\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\n </div>\n</div>\n<div class=\"content\" *ngIf=\"animationState === 'visible'\" [@contentAnim] [style.width]=\"contentWidth + 'px'\"\n [style.height]=\"contentHeight + 'px'\" [style.top]=\"contentTop + 'px'\" [style.left]=\"contentLeft + 'px'\">\n <ng-content></ng-content>\n</div>",
animations: [
trigger('scale', [
transition('* => visible', [
style({ transform: 'scale(0)', opacity: '0' }),
animate('240ms ease-out', style({ transform: 'scale(1)', opacity: '1' }))
]),
transition('visible => hidden', [
style({ transform: 'scale(1)', opacity: '1' }),
animate('215ms ease-in', style({ transform: 'scale(0)', opacity: '0' }))
]),
transition('visible => execute', [
style({ transform: 'scale(1)', opacity: '1' }),
animate('215ms 0.15s ease-in', style({ transform: 'scale(1.4)', opacity: '0' }))
])
]),
trigger('contentAnim', [
transition('void => *', [
style({ opacity: '0' }),
animate('100ms 240ms ease-out', style({ opacity: '1' }))
])
])
],
styles: [":host{display:block;height:100vh;width:100vw;position:absolute;--fiv-color-feature:rgba(56, 128, 255, 0.97);--fiv-color-pulse:var(--ion-color-light);--fiv-icon-color:var(--fiv-color-feature, var(--ion-color-primary))}.backdrop{display:block;height:100vh;width:100vw;position:absolute}.circle{position:absolute;border-radius:100%;background:var(--fiv-color-feature);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.feature{border-radius:100%;background:var(--fiv-color-pulse)}.feature.center.pulse{-webkit-animation:1.4s infinite feature-pulse;animation:1.4s infinite feature-pulse}@-webkit-keyframes feature-pulse{0%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 0 rgba(0,0,0,.24)}50%{transform:scale(1.1) translate(-45%,-45%)}100%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 28px transparent}}@keyframes feature-pulse{0%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 0 rgba(0,0,0,.24)}50%{transform:scale(1.1) translate(-45%,-45%)}100%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 28px transparent}}.content{position:absolute}.center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}"]
}] }
];
/** @nocollapse */
FivFeatureDiscovery.ctorParameters = () => [
{ type: Renderer2 },
{ type: Platform }
];
FivFeatureDiscovery.propDecorators = {
circle: [{ type: ViewChild, args: ['circle', { static: true },] }],
rect: [{ type: ViewChild, args: ['rect', { static: true },] }],
innerPulse: [{ type: ViewChild, args: ['pInner', { static: true, read: ElementRef },] }],
outerPulse: [{ type: ViewChild, args: ['pOuter', { static: true },] }],
fivClick: [{ type: Output }],
fivBackdropClick: [{ type: Output }],
fivClose: [{ type: Output }],
fivOpen: [{ type: Output }],
fivAnimation: [{ type: Output }],
_classes: [{ type: HostBinding, args: ['class',] }]
};
if (false) {
/** @type {?} */
FivFeatureDiscovery.prototype.top;
/** @type {?} */
FivFeatureDiscovery.prototype.left;
/** @type {?} */
FivFeatureDiscovery.prototype.width;
/** @type {?} */
FivFeatureDiscovery.prototype.height;
/** @type {?} */
FivFeatureDiscovery.prototype.innerDiameter;
/** @type {?} */
FivFeatureDiscovery.prototype.featurePadding;
/** @type {?} */
FivFeatureDiscovery.prototype.contentTop;
/** @type {?} */
FivFeatureDiscovery.prototype.contentLeft;
/** @type {?} */
FivFeatureDiscovery.prototype.contentWidth;
/** @type {?} */
FivFeatureDiscovery.prototype.contentHeight;
/** @type {?} */
FivFeatureDiscovery.prototype.contentOffset;
/** @type {?} */
FivFeatureDiscovery.prototype.bounds;
/** @type {?} */
FivFeatureDiscovery.prototype.icon;
/** @type {?} */
FivFeatureDiscovery.prototype.classes;
/** @type {?} */
FivFeatureDiscovery.prototype.circle;
/** @type {?} */
FivFeatureDiscovery.prototype.rect;
/** @type {?} */
FivFeatureDiscovery.prototype.innerPulse;
/** @type {?} */
FivFeatureDiscovery.prototype.outerPulse;
/** @type {?} */
FivFeatureDiscovery.prototype.animationState;
/** @type {?} */
FivFeatureDiscovery.prototype.pulse;
/** @type {?} */
FivFeatureDiscovery.prototype.fivClick;
/** @type {?} */
FivFeatureDiscovery.prototype.fivBackdropClick;
/** @type {?} */
FivFeatureDiscovery.prototype.fivClose;
/** @type {?} */
FivFeatureDiscovery.prototype.fivOpen;
/** @type {?} */
FivFeatureDiscovery.prototype.fivAnimation;
/**
* @type {?}
* @private
*/
FivFeatureDiscovery.prototype.renderer;
/**
* @type {?}
* @private
*/
FivFeatureDiscovery.prototype.platform;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kaXNjb3ZlcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpdmV0aHJlZS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2ZlYXR1cmUtZGlzY292ZXJ5L2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLE9BQU8sRUFDUCxLQUFLLEVBQ04sTUFBTSxxQkFBcUIsQ0FBQztBQXFDN0IsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7SUFrQzlCLFlBQW9CLFFBQW1CLEVBQVUsUUFBa0I7UUFBL0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQ25FLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFDYixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFVbEIsbUJBQWMsR0FBRyxRQUFRLENBQUM7UUFDMUIsVUFBSyxHQUFHLE9BQU8sQ0FBQztRQUVOLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLHFCQUFnQixH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QyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lCQUNsQyxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO3lCQUV0RCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt1QkFLcEMsTUFBTTsrQkFDTixNQUFNO3VCQUNOLE1BQU07c0JBQ04sTUFBTTsyQkFDTixNQUFNO3VCQUVOLFdBQVcsU0FBQyxPQUFPOzs7O0lBN0JwQixrQ0FBUTs7SUFDUixtQ0FBUzs7SUFDVCxvQ0FBWTs7SUFDWixxQ0FBYTs7SUFDYiw0Q0FBa0I7O0lBQ2xCLDZDQUFtQjs7SUFDbkIseUNBQWU7O0lBQ2YsMENBQWdCOztJQUNoQiwyQ0FBaUI7O0lBQ2pCLDRDQUFrQjs7SUFDbEIsNENBQWtCOztJQUNsQixxQ0FBd0I7O0lBQ3hCLG1DQUFhOztJQUNiLHNDQUFrQjs7SUFDbEIscUNBQTBEOztJQUMxRCxtQ0FBc0Q7O0lBQ3RELHlDQUN1Qjs7SUFDdkIseUNBQThEOztJQUU5RCw2Q0FBMEI7O0lBQzFCLG9DQUFnQjs7SUFFaEIsdUNBQTZDOztJQUM3QywrQ0FBcUQ7O0lBQ3JELHVDQUE2Qzs7SUFDN0Msc0NBQTRDOztJQUM1QywyQ0FBNEQ7Ozs7O0lBTWhELHVDQUEyQjs7Ozs7SUFBRSx1Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF0Zm9ybSwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHRyaWdnZXIsXG4gIHRyYW5zaXRpb24sXG4gIGFuaW1hdGUsXG4gIHN0eWxlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRmVhdHVyZVBvc2l0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaXZJY29uIH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zpdi1mZWF0dXJlLWRpc2NvdmVyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLWRpc2NvdmVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzY2FsZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdmlzaWJsZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgwKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjQwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknLCBvcGFjaXR5OiAnMScgfSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjE1bXMgZWFzZS1pbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMCknLCBvcGFjaXR5OiAnMCcgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gZXhlY3V0ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjE1bXMgMC4xNXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxLjQpJywgb3BhY2l0eTogJzAnIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignY29udGVudEFuaW0nLCBbXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcxMDBtcyAyNDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogJzEnIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdkZlYXR1cmVEaXNjb3ZlcnkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICB0b3AgPSAwO1xuICBsZWZ0ID0gMDtcbiAgd2lkdGggPSA0MjA7XG4gIGhlaWdodCA9IDQyMDtcbiAgaW5uZXJEaWFtZXRlciA9IDA7XG4gIGZlYXR1cmVQYWRkaW5nID0gMDtcbiAgY29udGVudFRvcCA9IDA7XG4gIGNvbnRlbnRMZWZ0ID0gMDtcbiAgY29udGVudFdpZHRoID0gMDtcbiAgY29udGVudEhlaWdodCA9IDA7XG4gIGNvbnRlbnRPZmZzZXQgPSAwO1xuICBib3VuZHM6IEZlYXR1cmVQb3NpdGlvbjtcbiAgaWNvbjogc3RyaW5nO1xuICBjbGFzc2VzOiBzdHJpbmdbXTtcbiAgQFZpZXdDaGlsZCgnY2lyY2xlJywgeyBzdGF0aWM6IHRydWUgfSkgY2lyY2xlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZWN0JywgeyBzdGF0aWM6IHRydWUgfSkgcmVjdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncElubmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW5uZXJQdWxzZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncE91dGVyJywgeyBzdGF0aWM6IHRydWUgfSkgb3V0ZXJQdWxzZTogRWxlbWVudFJlZjtcblxuICBhbmltYXRpb25TdGF0ZSA9ICdoaWRkZW4nO1xuICBwdWxzZSA9ICdzbWFsbCc7XG5cbiAgQE91dHB1dCgpIGZpdkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZCYWNrZHJvcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2T3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2QW5pbWF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IF9jbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge31cblxuICBzZXRCb3VuZHMoYm91bmRzOiBGZWF0dXJlUG9zaXRpb24pIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgICB0aGlzLmlubmVyRGlhbWV0ZXIgPVxuICAgICAgYm91bmRzLmhlaWdodCA+IGJvdW5kcy53aWR0aCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XG4gICAgdGhpcy50b3AgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgdGhpcy5sZWZ0ID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyIC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy5jYWxjdWxhdGVDb250ZW50Qm91bmRzKCk7XG4gICAgaWYgKCF0aGlzLmljb24pIHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gYC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50ICR7dGhpc1xuICAgICAgICAuaW5uZXJEaWFtZXRlciAvXG4gICAgICAgIDIgK1xuICAgICAgICA1fXB4LCB2YXIoLS1maXYtY29sb3ItZmVhdHVyZSkgJHt0aGlzLmlubmVyRGlhbWV0ZXIgLyAyICsgNX1weClgO1xuICAgICAgY29uc3QgcHVsc2VHcmFkaWVudCA9IGAtd2Via2l0LXJhZGlhbC1ncmFkaWVudCh0cmFuc3BhcmVudCAke3RoaXNcbiAgICAgICAgLmlubmVyRGlhbWV0ZXIgL1xuICAgICAgICAyICtcbiAgICAgICAgNX1weCwgdmFyKC0tZml2LWNvbG9yLXB1bHNlKSAke3RoaXMuaW5uZXJEaWFtZXRlciAvIDIgKyA1fXB4KWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY2lyY2xlLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgZ3JhZGllbnQpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5pbm5lclB1bHNlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgcHVsc2VHcmFkaWVudFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMub3V0ZXJQdWxzZS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgIHB1bHNlR3JhZGllbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNhbGN1bGF0ZUNvbnRlbnRCb3VuZHMoKSB7XG4gICAgY29uc3QgYWJzb2x1dGVDZW50ZXI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHtcbiAgICAgIHg6IHRoaXMucGxhdGZvcm0ud2lkdGgoKSAvIDIsXG4gICAgICB5OiB0aGlzLnBsYXRmb3JtLmhlaWdodCgpIC8gMlxuICAgIH07XG4gICAgY29uc3QgY2VudGVyOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSB7XG4gICAgICB4OiB0aGlzLmxlZnQgKyB0aGlzLndpZHRoIC8gMixcbiAgICAgIHk6IHRoaXMudG9wICsgdGhpcy53aWR0aCAvIDJcbiAgICB9O1xuICAgIGNvbnN0IHJlY3RXaWR0aCA9IE1hdGguc3FydChNYXRoLnBvdyh0aGlzLndpZHRoLCAyKSAvIDIpO1xuICAgIGNvbnN0IGlzVG9wID0gY2VudGVyLnkgPCBhYnNvbHV0ZUNlbnRlci55O1xuICAgIGNvbnN0IGlzTGVmdCA9IGNlbnRlci54IDwgYWJzb2x1dGVDZW50ZXIueDtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IHRoaXMuaW5uZXJEaWFtZXRlciAvIDI7XG4gICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZmVhdHVyZVBhZGRpbmcgLyAyO1xuICAgIGxldCBjb250ZW50UmlnaHQgPSAwO1xuICAgIGxldCBjb250ZW50Qm90dG9tID0gMDtcbiAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICB0aGlzLmNvbnRlbnRMZWZ0ID0gY2VudGVyLnggLSBpbm5lclJhZGl1cztcbiAgICAgIGNvbnRlbnRSaWdodCA9IE1hdGgubWluKFxuICAgICAgICBjZW50ZXIueCArIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIHRoaXMucGxhdGZvcm0ud2lkdGgoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50TGVmdCA9IE1hdGgubWF4KFxuICAgICAgICBjZW50ZXIueCAtIHJlY3RXaWR0aCAvIDIgLSB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb250ZW50UmlnaHQgPSBjZW50ZXIueCArIGlubmVyUmFkaXVzO1xuICAgIH1cbiAgICBpZiAoaXNUb3ApIHtcbiAgICAgIHRoaXMuY29udGVudFRvcCA9IGNlbnRlci55ICsgaW5uZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgY29udGVudEJvdHRvbSA9IGNlbnRlci55ICsgcmVjdFdpZHRoIC8gMiArIC0xICogdGhpcy5jb250ZW50T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRUb3AgPSBjZW50ZXIueSAtIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQ7XG4gICAgICBjb250ZW50Qm90dG9tID0gY2VudGVyLnkgLSBpbm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50V2lkdGggPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRMZWZ0IC0gY29udGVudFJpZ2h0KTtcbiAgICB0aGlzLmNvbnRlbnRIZWlnaHQgPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRUb3AgLSBjb250ZW50Qm90dG9tKTtcbiAgfVxuICBoYW5kbGVDaXJjbGVBbmltYXRpb24oZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5maXZBbmltYXRpb24uZW1pdChldmVudCk7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgdGhpcy5maXZPcGVuLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICB0aGlzLmZpdkNsb3NlLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdleGVjdXRlJykge1xuICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ3Zpc2libGUnO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ2hpZGRlbic7XG4gIH1cblxuICBmZWF0dXJlQ2xpY2soKSB7XG4gICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9ICdleGVjdXRlJztcbiAgfVxuXG4gIHNldEljb24oaWNvbjogRml2SWNvbiB8IElvbkljb24pIHtcbiAgICBpZiAoaWNvbikge1xuICAgICAgdGhpcy5pY29uID0gaWNvbi5uYW1lO1xuICAgIH1cbiAgfVxufVxuIl19