ngy-tutorial
Version:
291 lines • 29.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewChild, ElementRef, Inject } from '@angular/core';
import { trigger, transition, animate, keyframes, style, query } from '@angular/animations';
import { PromptComponent } from '../prompt/prompt.component';
import { DOCUMENT } from '@angular/common';
import { NgyTutorialService } from '../ngy-tutorial.service';
var NgyTutorialComponent = /** @class */ (function () {
function NgyTutorialComponent(svc, document) {
var _this = this;
this.svc = svc;
this.document = document;
this.enabled = false;
this.steps = [];
this.currentStep = 0;
this.svc.toShow.subscribe(function (stps) {
_this.steps = stps;
_this.currentStep = 0;
if (_this.steps.length) {
_this.enabled = true;
setTimeout(function () {
_this.setupUIForStep();
});
}
else {
_this.enabled = false;
}
});
this.svc.currentStep.subscribe(function (step) {
_this.currentStep = step;
if (_this.currentStep >= _this.steps.length || _this.currentStep < 0) {
_this.svc.hideTutorial();
}
if (_this.enabled) {
setTimeout(function () {
_this.setupUIForStep();
});
}
});
}
/**
* @return {?}
*/
NgyTutorialComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @private
* @return {?}
*/
NgyTutorialComponent.prototype.setupUIForStep = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var step = this.steps[this.currentStep];
if (step) {
this.resetCovers();
this.prompt.ngOnInit();
if (!step.options.relatedElement) {
this.coverAll();
}
else {
/** @type {?} */
var elem = this.document.body.querySelector("#" + step.options.relatedElement);
if (elem) {
this.coverShowElement(elem);
this.prompt.setPromptForElement(elem, step.options.placement);
if (step.options.disableInteraction) {
this.coverElement(elem);
}
}
else {
this.coverAll();
}
}
}
};
/**
* @private
* @param {?} element
* @return {?}
*/
NgyTutorialComponent.prototype.coverElement = /**
* @private
* @param {?} element
* @return {?}
*/
function (element) {
/** @type {?} */
var positionInfo = element.getBoundingClientRect();
/** @type {?} */
var margin = 10;
this.setPosition(this.elementCover.nativeElement, positionInfo.left - margin, positionInfo.top - margin, positionInfo.width + 2 * margin, positionInfo.height + 2 * margin);
};
/**
* @private
* @return {?}
*/
NgyTutorialComponent.prototype.coverAll = /**
* @private
* @return {?}
*/
function () {
if (this.topCover) {
this.topCover.nativeElement.style.left = '0';
this.topCover.nativeElement.style.top = '0';
this.topCover.nativeElement.style.height = '100vh';
this.prompt.setPromptForElement();
}
};
/**
* @private
* @param {?} element
* @return {?}
*/
NgyTutorialComponent.prototype.coverShowElement = /**
* @private
* @param {?} element
* @return {?}
*/
function (element) {
/** @type {?} */
var positionInfo = element.getBoundingClientRect();
/** @type {?} */
var margin = 10;
/** @type {?} */
var viewW = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
/** @type {?} */
var viewH = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
this.setPosition(this.topCover.nativeElement, 0, 0, viewW, positionInfo.top - margin);
this.setPosition(this.leftCover.nativeElement, 0, positionInfo.top - margin, positionInfo.left - margin, positionInfo.height + 2 * margin);
this.setPosition(this.rightCover.nativeElement, positionInfo.left + positionInfo.width + margin, positionInfo.top - margin, viewW - positionInfo.left - positionInfo.width - margin, positionInfo.height + 2 * margin);
this.setPosition(this.bottomCover.nativeElement, 0, positionInfo.top + positionInfo.height + margin, viewW, viewH - positionInfo.top - positionInfo.height - margin);
};
/**
* @private
* @param {?} element
* @param {?} left
* @param {?} top
* @param {?} width
* @param {?} height
* @return {?}
*/
NgyTutorialComponent.prototype.setPosition = /**
* @private
* @param {?} element
* @param {?} left
* @param {?} top
* @param {?} width
* @param {?} height
* @return {?}
*/
function (element, left, top, width, height) {
element.style.left = left + "px";
element.style.top = top + "px";
element.style.width = width + "px";
element.style.height = height + "px";
};
/**
* @private
* @return {?}
*/
NgyTutorialComponent.prototype.resetCovers = /**
* @private
* @return {?}
*/
function () {
if (this.topCover) {
this.topCover.nativeElement.style.removeProperty('height');
this.topCover.nativeElement.style.removeProperty('width');
this.topCover.nativeElement.style.removeProperty('top');
this.topCover.nativeElement.style.removeProperty('left');
}
if (this.leftCover) {
this.leftCover.nativeElement.style.removeProperty('height');
this.leftCover.nativeElement.style.removeProperty('width');
this.leftCover.nativeElement.style.removeProperty('top');
this.leftCover.nativeElement.style.removeProperty('left');
}
if (this.rightCover) {
this.rightCover.nativeElement.style.removeProperty('height');
this.rightCover.nativeElement.style.removeProperty('width');
this.rightCover.nativeElement.style.removeProperty('top');
this.rightCover.nativeElement.style.removeProperty('left');
}
if (this.bottomCover) {
this.bottomCover.nativeElement.style.removeProperty('height');
this.bottomCover.nativeElement.style.removeProperty('width');
this.bottomCover.nativeElement.style.removeProperty('top');
this.bottomCover.nativeElement.style.removeProperty('left');
}
if (this.elementCover) {
this.elementCover.nativeElement.style.removeProperty('height');
this.elementCover.nativeElement.style.removeProperty('width');
this.elementCover.nativeElement.style.removeProperty('top');
this.elementCover.nativeElement.style.removeProperty('left');
}
};
NgyTutorialComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-ngy-tutorial',
template: "<lib-ngy-tutorial-prompt *ngIf=\"enabled\" @fadeAnimation [step]=\"steps[currentStep]\" [stepNumber]=\"currentStep\" [totalSteps]=\"steps.length\" #prompt></lib-ngy-tutorial-prompt>\n<div class=\"window-cover full-width\" #topCover *ngIf=\"enabled\" @fadeAnimation>\n</div>\n<div class=\"window-cover\" #leftCover *ngIf=\"enabled\" @fadeAnimation>\n</div>\n<div class=\"window-cover\" #rightCover *ngIf=\"enabled\" @fadeAnimation>\n</div>\n<div class=\"window-cover full-width\" #bottomCover *ngIf=\"enabled\" @fadeAnimation>\n</div>\n<div class=\"element-cover\" #elementCover>\n\n</div>",
styles: [":host{position:fixed;left:0;top:0;width:0;height:0}.window-cover{position:fixed;background:rgba(0,0,0,.8);z-index:998}.window-cover.full-width{width:100vw}.element-cover{position:fixed;z-index:998}lib-ngy-tutorial-prompt{top:0;left:0;position:fixed;z-index:999}"],
animations: [
trigger('fadeAnimation', [
transition('void => *', [
query(':self', animate('0.3s ease-in-out', keyframes([
style({ opacity: 0 }),
style({ opacity: 1 }),
])), { optional: true }),
]),
transition('* => void', [
query(':self', animate('0.3s ease-in-out', keyframes([
style({ opacity: 1 }),
style({ opacity: 0 }),
])), { optional: true }),
]),
]),
]
},] },
];
NgyTutorialComponent.ctorParameters = function () { return [
{ type: NgyTutorialService },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
]; };
NgyTutorialComponent.propDecorators = {
topCover: [{ type: ViewChild, args: ['topCover',] }],
leftCover: [{ type: ViewChild, args: ['leftCover',] }],
rightCover: [{ type: ViewChild, args: ['rightCover',] }],
bottomCover: [{ type: ViewChild, args: ['bottomCover',] }],
elementCover: [{ type: ViewChild, args: ['elementCover',] }],
prompt: [{ type: ViewChild, args: ['prompt',] }]
};
return NgyTutorialComponent;
}());
export { NgyTutorialComponent };
if (false) {
/** @type {?} */
NgyTutorialComponent.prototype.enabled;
/** @type {?} */
NgyTutorialComponent.prototype.steps;
/** @type {?} */
NgyTutorialComponent.prototype.currentStep;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.topCover;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.leftCover;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.rightCover;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.bottomCover;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.elementCover;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.prompt;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.svc;
/**
* @type {?}
* @private
*/
NgyTutorialComponent.prototype.document;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHV0b3JpYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd5LXR1dG9yaWFsLyIsInNvdXJjZXMiOlsibGliL3R1dG9yaWFsL3R1dG9yaWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdEO0lBNkNFLDhCQUNVLEdBQXVCLEVBQ0wsUUFBYTtRQUZ6QyxpQkEyQkM7UUExQlMsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFDTCxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBWHpDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFvQixFQUFFLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFXZCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBQSxJQUFJO1lBQzVCLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEtBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixVQUFVLENBQUM7b0JBQ1QsS0FBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FB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a0I7Z0RBaUR0QixNQUFNLFNBQUMsUUFBUTs7OzJCQVJqQixTQUFTLFNBQUMsVUFBVTs0QkFDcEIsU0FBUyxTQUFDLFdBQVc7NkJBQ3JCLFNBQVMsU0FBQyxZQUFZOzhCQUN0QixTQUFTLFNBQUMsYUFBYTsrQkFDdkIsU0FBUyxTQUFDLGNBQWM7eUJBQ3hCLFNBQVMsU0FBQyxRQUFROztJQTBJckIsMkJBQUM7Q0FBQSxBQXRMRCxJQXNMQztTQXBKWSxvQkFBb0I7OztJQUUvQix1Q0FBZ0I7O0lBQ2hCLHFDQUE0Qjs7SUFDNUIsMkNBQWdCOzs7OztJQUNoQix3Q0FBb0Q7Ozs7O0lBQ3BELHlDQUFzRDs7Ozs7SUFDdEQsMENBQXdEOzs7OztJQUN4RCwyQ0FBMEQ7Ozs7O0lBQzFELDRDQUE0RDs7Ozs7SUFDNUQsc0NBQXFEOzs7OztJQUVuRCxtQ0FBK0I7Ozs7O0lBQy9CLHdDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgYW5pbWF0ZSwga2V5ZnJhbWVzLCBzdHlsZSwgcXVlcnkgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IElUdXRvcmlhbFN0ZXAgfSBmcm9tICcuLi9hcGkvaS10dXRvcmlhbC1zdGVwJztcbmltcG9ydCB7IFByb21wdENvbXBvbmVudCB9IGZyb20gJy4uL3Byb21wdC9wcm9tcHQuY29tcG9uZW50JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN0ZXBQcm9tcHRQbGFjZW1lbnQgfSBmcm9tICcuLi9hcGkvaS1vcHRpb25zJztcbmltcG9ydCB7IE5neVR1dG9yaWFsU2VydmljZSB9IGZyb20gJy4uL25neS10dXRvcmlhbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5neS10dXRvcmlhbCcsXG4gIHRlbXBsYXRlOiBgPGxpYi1uZ3ktdHV0b3JpYWwtcHJvbXB0ICpuZ0lmPVwiZW5hYmxlZFwiIEBmYWRlQW5pbWF0aW9uIFtzdGVwXT1cInN0ZXBzW2N1cnJlbnRTdGVwXVwiIFtzdGVwTnVtYmVyXT1cImN1cnJlbnRTdGVwXCIgW3RvdGFsU3RlcHNdPVwic3RlcHMubGVuZ3RoXCIgI3Byb21wdD48L2xpYi1uZ3ktdHV0b3JpYWwtcHJvbXB0PlxuPGRpdiBjbGFzcz1cIndpbmRvdy1jb3ZlciBmdWxsLXdpZHRoXCIgI3RvcENvdmVyICpuZ0lmPVwiZW5hYmxlZFwiIEBmYWRlQW5pbWF0aW9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwid2luZG93LWNvdmVyXCIgI2xlZnRDb3ZlciAqbmdJZj1cImVuYWJsZWRcIiBAZmFkZUFuaW1hdGlvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIndpbmRvdy1jb3ZlclwiICNyaWdodENvdmVyICpuZ0lmPVwiZW5hYmxlZFwiIEBmYWRlQW5pbWF0aW9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwid2luZG93LWNvdmVyIGZ1bGwtd2lkdGhcIiAjYm90dG9tQ292ZXIgKm5nSWY9XCJlbmFibGVkXCIgQGZhZGVBbmltYXRpb24+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJlbGVtZW50LWNvdmVyXCIgI2VsZW1lbnRDb3Zlcj5cblxuPC9kaXY+YCxcbiAgc3R5bGVzOiBbYDpob3N0e3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDt3aWR0aDowO2hlaWdodDowfS53aW5kb3ctY292ZXJ7cG9zaXRpb246Zml4ZWQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC44KTt6LWluZGV4Ojk5OH0ud2luZG93LWNvdmVyLmZ1bGwtd2lkdGh7d2lkdGg6MTAwdnd9LmVsZW1lbnQtY292ZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDo5OTh9bGliLW5neS10dXRvcmlhbC1wcm9tcHR7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6OTk5fWBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZUFuaW1hdGlvbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgcXVlcnkoJzpzZWxmJyxcbiAgICAgICAgICBhbmltYXRlKCcwLjNzIGVhc2UtaW4tb3V0Jywga2V5ZnJhbWVzKFtcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICAgICAgICBdKSksIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcbiAgICAgICAgcXVlcnkoJzpzZWxmJyxcbiAgICAgICAgICBhbmltYXRlKCcwLjNzIGVhc2UtaW4tb3V0Jywga2V5ZnJhbWVzKFtcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcbiAgICAgICAgICBdKSksIHsgb3B0aW9uYWw6IHRydWUgfSksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3lUdXRvcmlhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZW5hYmxlZCA9IGZhbHNlO1xuICBzdGVwczogSVR1dG9yaWFsU3RlcFtdID0gW107XG4gIGN1cnJlbnRTdGVwID0gMDtcbiAgQFZpZXdDaGlsZCgndG9wQ292ZXInKSBwcml2YXRlIHRvcENvdmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsZWZ0Q292ZXInKSBwcml2YXRlIGxlZnRDb3ZlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmlnaHRDb3ZlcicpIHByaXZhdGUgcmlnaHRDb3ZlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm90dG9tQ292ZXInKSBwcml2YXRlIGJvdHRvbUNvdmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbGVtZW50Q292ZXInKSBwcml2YXRlIGVsZW1lbnRDb3ZlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncHJvbXB0JykgcHJpdmF0ZSBwcm9tcHQ6IFByb21wdENvbXBvbmVudDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdmM6IE5neVR1dG9yaWFsU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICkge1xuICAgIHRoaXMuc3ZjLnRvU2hvdy5zdWJzY3JpYmUoc3RwcyA9PiB7XG4gICAgICB0aGlzLnN0ZXBzID0gc3RwcztcbiAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSAwO1xuICAgICAgaWYgKHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dXBVSUZvclN0ZXAoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN2Yy5jdXJyZW50U3RlcC5zdWJzY3JpYmUoc3RlcCA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwID0gc3RlcDtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwID49IHRoaXMuc3RlcHMubGVuZ3RoIHx8IHRoaXMuY3VycmVudFN0ZXAgPCAwKSB7XG4gICAgICAgIHRoaXMuc3ZjLmhpZGVUdXRvcmlhbCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldHVwVUlGb3JTdGVwKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBVSUZvclN0ZXAoKSB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuc3RlcHNbdGhpcy5jdXJyZW50U3RlcF07XG4gICAgaWYgKHN0ZXApIHtcbiAgICAgIHRoaXMucmVzZXRDb3ZlcnMoKTtcbiAgICAgIHRoaXMucHJvbXB0Lm5nT25Jbml0KCk7XG4gICAgICBpZiAoIXN0ZXAub3B0aW9ucy5yZWxhdGVkRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNvdmVyQWxsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5kb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoYCMke3N0ZXAub3B0aW9ucy5yZWxhdGVkRWxlbWVudH1gKTtcbiAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICB0aGlzLmNvdmVyU2hvd0VsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgdGhpcy5wcm9tcHQuc2V0UHJvbXB0Rm9yRWxlbWVudChlbGVtLCBzdGVwLm9wdGlvbnMucGxhY2VtZW50KTtcbiAgICAgICAgICBpZiAoc3RlcC5vcHRpb25zLmRpc2FibGVJbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb3ZlckVsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY292ZXJBbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvdmVyRWxlbWVudChlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgY29uc3QgcG9zaXRpb25JbmZvID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtYXJnaW4gPSAxMDtcbiAgICB0aGlzLnNldFBvc2l0aW9uKHRoaXMuZWxlbWVudENvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb3NpdGlvbkluZm8ubGVmdCAtIG1hcmdpbixcbiAgICAgIHBvc2l0aW9uSW5mby50b3AgLSBtYXJnaW4sXG4gICAgICBwb3NpdGlvbkluZm8ud2lkdGggKyAyICogbWFyZ2luLFxuICAgICAgcG9zaXRpb25JbmZvLmhlaWdodCArIDIgKiBtYXJnaW4pO1xuICB9XG4gIHByaXZhdGUgY292ZXJBbGwoKSB7XG4gICAgaWYgKHRoaXMudG9wQ292ZXIpIHtcbiAgICAgIHRoaXMudG9wQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgdGhpcy50b3BDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9ICcwJztcbiAgICAgIHRoaXMudG9wQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMTAwdmgnO1xuICAgICAgdGhpcy5wcm9tcHQuc2V0UHJvbXB0Rm9yRWxlbWVudCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvdmVyU2hvd0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIGNvbnN0IHBvc2l0aW9uSW5mbyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbWFyZ2luID0gMTA7XG4gICAgY29uc3Qgdmlld1cgPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICAgIGNvbnN0IHZpZXdIID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy50b3BDb3Zlci5uYXRpdmVFbGVtZW50LFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICB2aWV3VyxcbiAgICAgIHBvc2l0aW9uSW5mby50b3AgLSBtYXJnaW4pO1xuICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5sZWZ0Q292ZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIDAsXG4gICAgICBwb3NpdGlvbkluZm8udG9wIC0gbWFyZ2luLFxuICAgICAgcG9zaXRpb25JbmZvLmxlZnQgLSBtYXJnaW4sXG4gICAgICBwb3NpdGlvbkluZm8uaGVpZ2h0ICsgMiAqIG1hcmdpbik7XG4gICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLnJpZ2h0Q292ZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvc2l0aW9uSW5mby5sZWZ0ICsgcG9zaXRpb25JbmZvLndpZHRoICsgbWFyZ2luLFxuICAgICAgcG9zaXRpb25JbmZvLnRvcCAtIG1hcmdpbixcbiAgICAgIHZpZXdXIC0gcG9zaXRpb25JbmZvLmxlZnQgLSBwb3NpdGlvbkluZm8ud2lkdGggLSBtYXJnaW4sXG4gICAgICBwb3NpdGlvbkluZm8uaGVpZ2h0ICsgMiAqIG1hcmdpbik7XG4gICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLmJvdHRvbUNvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAwLFxuICAgICAgcG9zaXRpb25JbmZvLnRvcCArIHBvc2l0aW9uSW5mby5oZWlnaHQgKyBtYXJnaW4sXG4gICAgICB2aWV3VyxcbiAgICAgIHZpZXdIIC0gcG9zaXRpb25JbmZvLnRvcCAtIHBvc2l0aW9uSW5mby5oZWlnaHQgLSBtYXJnaW4pO1xuXG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uKGVsZW1lbnQ6IGFueSwgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gIH1cbiAgcHJpdmF0ZSByZXNldENvdmVycygpIHtcbiAgICBpZiAodGhpcy50b3BDb3Zlcikge1xuICAgICAgdGhpcy50b3BDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdoZWlnaHQnKTtcbiAgICAgIHRoaXMudG9wQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnd2lkdGgnKTtcbiAgICAgIHRoaXMudG9wQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndG9wJyk7XG4gICAgICB0aGlzLnRvcENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2xlZnQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGVmdENvdmVyKSB7XG4gICAgICB0aGlzLmxlZnRDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdoZWlnaHQnKTtcbiAgICAgIHRoaXMubGVmdENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3dpZHRoJyk7XG4gICAgICB0aGlzLmxlZnRDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCd0b3AnKTtcbiAgICAgIHRoaXMubGVmdENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2xlZnQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmlnaHRDb3Zlcikge1xuICAgICAgdGhpcy5yaWdodENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2hlaWdodCcpO1xuICAgICAgdGhpcy5yaWdodENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3dpZHRoJyk7XG4gICAgICB0aGlzLnJpZ2h0Q292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndG9wJyk7XG4gICAgICB0aGlzLnJpZ2h0Q292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbGVmdCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3R0b21Db3Zlcikge1xuICAgICAgdGhpcy5ib3R0b21Db3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdoZWlnaHQnKTtcbiAgICAgIHRoaXMuYm90dG9tQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnd2lkdGgnKTtcbiAgICAgIHRoaXMuYm90dG9tQ292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndG9wJyk7XG4gICAgICB0aGlzLmJvdHRvbUNvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2xlZnQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWxlbWVudENvdmVyKSB7XG4gICAgICB0aGlzLmVsZW1lbnRDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdoZWlnaHQnKTtcbiAgICAgIHRoaXMuZWxlbWVudENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3dpZHRoJyk7XG4gICAgICB0aGlzLmVsZW1lbnRDb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCd0b3AnKTtcbiAgICAgIHRoaXMuZWxlbWVudENvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2xlZnQnKTtcbiAgICB9XG4gIH1cbn1cblxuIl19