@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
249 lines (248 loc) • 23.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ElementRef, ViewChild, HostListener, Inject, Input, Renderer2 } from '@angular/core';
import { Subject } from 'rxjs';
import { DOCUMENT } from '@angular/platform-browser';
var AsiDropdownContainer = /** @class */ (function () {
function AsiDropdownContainer(document, renderer, elementRef) {
this.document = document;
this.renderer = renderer;
this.elementRef = elementRef;
this.calculWidth = true;
this.subjectContainer = new Subject();
}
/**
* @param {?} event
* @return {?}
*/
AsiDropdownContainer.prototype.documentClick = /**
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
if (!this.drop.nativeElement.contains(event.target)) {
this.asiDropDownService.canClose(this.index, this.canClose).subscribe(function (close) {
if (close) {
setTimeout(function () {
_this.close();
});
}
});
}
};
/**
* @return {?}
*/
AsiDropdownContainer.prototype.close = /**
* @return {?}
*/
function () {
this.subjectContainer.next(this);
this.subjectContainer.complete();
};
// Close event when click outside
/**
* @return {?}
*/
AsiDropdownContainer.prototype.onClose = /**
* @return {?}
*/
function () {
return this.subjectContainer.asObservable();
};
/**
* Move the container under htmlElement
* @param htmlElement The parent HTMLElement of the dropdown
*/
/**
* Move the container under htmlElement
* @param {?} elementRef
* @return {?}
*/
AsiDropdownContainer.prototype.forElement = /**
* Move the container under htmlElement
* @param {?} elementRef
* @return {?}
*/
function (elementRef) {
this.referenceElement = elementRef;
/** @type {?} */
var rectPos = elementRef.getBoundingClientRect();
/** @type {?} */
var bodyComputedStyle = getComputedStyle(this.document.body);
/** @type {?} */
var bodyMarginTop = parseInt(bodyComputedStyle.marginTop.slice(0, -2), 10);
/** @type {?} */
var bodyMarginLeft = parseInt(bodyComputedStyle.marginLeft.slice(0, -2), 10);
/** @type {?} */
var topVerticalPosition = rectPos.top + this.getScrollTopValue() - bodyMarginTop;
if (topVerticalPosition > this.document.body.clientHeight / 2) {
// show over the element
this.drop.nativeElement.style.bottom = (this.document.body.clientHeight - topVerticalPosition) + 'px';
this.drop.nativeElement.style.marginBottom = '5px';
}
else {
// show under the element
this.drop.nativeElement.style.top = (topVerticalPosition + elementRef.offsetHeight) + 'px';
this.drop.nativeElement.style.marginTop = '5px';
}
/** @type {?} */
var screenVerticalPosition = rectPos.top - bodyMarginTop;
/** @type {?} */
var bodyVerticalPosition;
if (screenVerticalPosition > this.document.body.clientHeight / 2) {
// show over the element
bodyVerticalPosition = this.document.body.clientHeight - (this.getScrollTopValue() + screenVerticalPosition);
this.drop.nativeElement.style.bottom = bodyVerticalPosition + 'px';
this.drop.nativeElement.style.marginBottom = '2px';
}
else {
// show under the element
bodyVerticalPosition = this.getScrollTopValue() + screenVerticalPosition + elementRef.offsetHeight;
this.drop.nativeElement.style.top = bodyVerticalPosition + 'px';
this.drop.nativeElement.style.marginTop = '2px';
}
this.drop.nativeElement.style.left = rectPos.left + this.getScrollLeftValue() - bodyMarginLeft + 'px';
this.drop.nativeElement.style.width = elementRef.offsetWidth + 'px';
};
/**
* @return {?}
*/
AsiDropdownContainer.prototype.getScrollTopValue = /**
* @return {?}
*/
function () {
return this.document.body.scrollTop + this.document.documentElement.scrollTop;
};
/**
* @return {?}
*/
AsiDropdownContainer.prototype.getScrollLeftValue = /**
* @return {?}
*/
function () {
return this.document.body.scrollLeft + this.document.documentElement.scrollLeft;
};
/**
* @param element The content to display in the container
*/
/**
* @param {?} asiDrownDown
* @return {?}
*/
AsiDropdownContainer.prototype.show = /**
* @param {?} asiDrownDown
* @return {?}
*/
function (asiDrownDown) {
var _this = this;
setTimeout(function () {
_this.template = asiDrownDown.contentTemplate;
/** @type {?} */
var visibility = _this.drop.nativeElement.style.visibility;
_this.drop.nativeElement.style.visibility = 'hidden';
if (asiDrownDown.dropDownClass) {
_this.renderer.addClass(_this.elementRef.nativeElement, asiDrownDown.dropDownClass);
}
setTimeout(function () {
/** @type {?} */
var dropRight = _this.drop.nativeElement.offsetLeft + _this.drop.nativeElement.offsetWidth;
if (dropRight > _this.document.documentElement.clientWidth) {
_this.drop.nativeElement.style.left = _this.drop.nativeElement.offsetLeft
+ _this.document.documentElement.scrollLeft - (dropRight - _this.document.documentElement.clientWidth) + 'px';
}
_this.drop.nativeElement.style.visibility = visibility;
});
});
};
/**
* @param {?} service
* @return {?}
*/
AsiDropdownContainer.prototype.injectService = /**
* @param {?} service
* @return {?}
*/
function (service) {
this.asiDropDownService = service;
};
/**
* @param {?} index
* @return {?}
*/
AsiDropdownContainer.prototype.setIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
this.index = index;
this.elementRef.nativeElement.style.zIndex = AsiDropdownContainer.BASE_INDEX + index;
};
/**
* @param {?} calculWidth
* @return {?}
*/
AsiDropdownContainer.prototype.setCalculWidth = /**
* @param {?} calculWidth
* @return {?}
*/
function (calculWidth) {
if (calculWidth) {
this.drop.nativeElement.style.width = this.referenceElement.offsetWidth + 'px';
}
else {
this.drop.nativeElement.style.width = '';
}
};
AsiDropdownContainer.BASE_INDEX = 125;
AsiDropdownContainer.decorators = [
{ type: Component, args: [{
selector: 'asi-dropdown-container',
host: { 'class': 'asi-component asi-dropdown-container' },
template: "<div #drop class=\"dropdown-container\">\r\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\r\n</div>"
}] }
];
/** @nocollapse */
AsiDropdownContainer.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: Renderer2 },
{ type: ElementRef }
]; };
AsiDropdownContainer.propDecorators = {
calculWidth: [{ type: Input }],
drop: [{ type: ViewChild, args: ['drop', { read: ElementRef },] }],
documentClick: [{ type: HostListener, args: ['document:mouseup', ['$event'],] }]
};
return AsiDropdownContainer;
}());
export { AsiDropdownContainer };
if (false) {
/** @type {?} */
AsiDropdownContainer.BASE_INDEX;
/** @type {?} */
AsiDropdownContainer.prototype.index;
/** @type {?} */
AsiDropdownContainer.prototype.canClose;
/** @type {?} */
AsiDropdownContainer.prototype.calculWidth;
/** @type {?} */
AsiDropdownContainer.prototype.drop;
/** @type {?} */
AsiDropdownContainer.prototype.subjectContainer;
/** @type {?} */
AsiDropdownContainer.prototype.asiDropDownService;
/** @type {?} */
AsiDropdownContainer.prototype.template;
/** @type {?} */
AsiDropdownContainer.prototype.referenceElement;
/** @type {?} */
AsiDropdownContainer.prototype.document;
/** @type {?} */
AsiDropdownContainer.prototype.renderer;
/** @type {?} */
AsiDropdownContainer.prototype.elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRyb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWRyb3Bkb3duL2NvbnRhaW5lci9hc2ktZHJvcGRvd24tY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFlLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7SUF5Qm5ELDhCQUFzQyxRQUFhLEVBQVUsUUFBbUIsRUFBVSxVQUFzQjtRQUExRSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7MkJBWHpGLElBQUk7Z0NBSStCLElBQUksT0FBTyxFQUFFO0tBUXRFOzs7OztJQUdELDRDQUFhOzs7O0lBRGIsVUFDYyxLQUFpQjtRQUQvQixpQkFXQztRQVRDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQSxLQUFLO2dCQUN6RSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNWLFVBQVUsQ0FBQzt3QkFDVCxLQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2QsQ0FBQyxDQUFDO2lCQUNKO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7S0FDRjs7OztJQUVELG9DQUFLOzs7SUFBTDtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ2xDO0lBRUQsaUNBQWlDOzs7O0lBQ2pDLHNDQUFPOzs7SUFBUDtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDN0M7SUFFRDs7O09BR0c7Ozs7OztJQUNILHlDQUFVOzs7OztJQUFWLFVBQVcsVUFBZTtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDOztRQUVuQyxJQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7UUFHbkQsSUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztRQUUvRCxJQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzs7UUFDN0UsSUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7O1FBRS9FLElBQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFFbkYsRUFBRSxDQUFDLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDdEcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDcEQ7UUFBQyxJQUFJLENBQUMsQ0FBQzs7WUFFTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUNqRDs7UUFFRCxJQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDOztRQUMzRCxJQUFJLG9CQUFvQixDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVqRSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQ3BEO1FBQUMsSUFBSSxDQUFDLENBQUM7O1lBRU4sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNuRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUNqRDtRQUtELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7S0FDckU7Ozs7SUFFTyxnREFBaUI7Ozs7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Ozs7O0lBR3hFLGlEQUFrQjs7OztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQzs7SUFHbEY7O09BRUc7Ozs7O0lBQ0gsbUNBQUk7Ozs7SUFBSixVQUFLLFlBQXlCO1FBQTlCLGlCQWlCQztRQWhCQyxVQUFVLENBQUM7WUFDVCxLQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7O1lBQzdDLElBQUksVUFBVSxHQUFHLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDMUQsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDcEQsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLEtBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuRjtZQUNELFVBQVUsQ0FBQzs7Z0JBQ1QsSUFBSSxTQUFTLEdBQUcsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztnQkFDekYsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzFELEtBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVTswQkFDbkUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDL0c7Z0JBQ0QsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7YUFDdkQsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0tBQ0o7Ozs7O0lBRU0sNENBQWE7Ozs7Y0FBQyxPQUEyQjtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDOzs7Ozs7SUFHN0IsdUNBQVE7Ozs7Y0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzs7Ozs7O0lBR2hGLDZDQUFjOzs7O2NBQUMsV0FBb0I7UUFDeEMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ2hGO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUMxQzs7c0NBdkl5QixHQUFHOztnQkFQaEMsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRTtvQkFDekQsaUlBQW9EO2lCQUNyRDs7OztnREFtQmMsTUFBTSxTQUFDLFFBQVE7Z0JBNUJ1RCxTQUFTO2dCQUE3RCxVQUFVOzs7OEJBaUJ4QyxLQUFLO3VCQUVMLFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dDQVl0QyxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7OytCQWhDOUM7O1NBV2Esb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNpRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi8uLi9hc2ktZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBc2lEcm9wRG93biB9IGZyb20gJy4vLi4vYXNpLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FzaS1kcm9wZG93bi1jb250YWluZXInLFxyXG4gIGhvc3Q6IHsgJ2NsYXNzJzogJ2FzaS1jb21wb25lbnQgYXNpLWRyb3Bkb3duLWNvbnRhaW5lcicgfSxcclxuICB0ZW1wbGF0ZVVybDogJ2FzaS1kcm9wZG93bi1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lEcm9wZG93bkNvbnRhaW5lciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEJBU0VfSU5ERVggPSAxMjU7XHJcblxyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgY2FuQ2xvc2U6IEZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKSBjYWxjdWxXaWR0aCA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Ryb3AnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcDogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBzdWJqZWN0Q29udGFpbmVyOiBTdWJqZWN0PEFzaURyb3Bkb3duQ29udGFpbmVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgYXNpRHJvcERvd25TZXJ2aWNlOiBBc2lEcm9wZG93blNlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwcml2YXRlIHJlZmVyZW5jZUVsZW1lbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgZG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuYXNpRHJvcERvd25TZXJ2aWNlLmNhbkNsb3NlKHRoaXMuaW5kZXgsIHRoaXMuY2FuQ2xvc2UpLnN1YnNjcmliZShjbG9zZSA9PiB7XHJcbiAgICAgICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLnN1YmplY3RDb250YWluZXIubmV4dCh0aGlzKTtcclxuICAgIHRoaXMuc3ViamVjdENvbnRhaW5lci5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2UgZXZlbnQgd2hlbiBjbGljayBvdXRzaWRlXHJcbiAgb25DbG9zZSgpOiBPYnNlcnZhYmxlPEFzaURyb3Bkb3duQ29udGFpbmVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0Q29udGFpbmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTW92ZSB0aGUgY29udGFpbmVyIHVuZGVyIGh0bWxFbGVtZW50XHJcbiAgICogQHBhcmFtIGh0bWxFbGVtZW50IFRoZSBwYXJlbnQgSFRNTEVsZW1lbnQgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgZm9yRWxlbWVudChlbGVtZW50UmVmOiBhbnkpIHtcclxuICAgIHRoaXMucmVmZXJlbmNlRWxlbWVudCA9IGVsZW1lbnRSZWY7XHJcblxyXG4gICAgY29uc3QgcmVjdFBvcyA9IGVsZW1lbnRSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBjb21wdXRlZCBjbGFzcyBtYXJnaW4gKGZyb20gYm90aCBzdHlsZSArIGNzcyBjbGFzcylcclxuICAgIGNvbnN0IGJvZHlDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHkpO1xyXG5cclxuICAgIGNvbnN0IGJvZHlNYXJnaW5Ub3AgPSBwYXJzZUludChib2R5Q29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3Auc2xpY2UoMCwgLTIpLCAxMCk7XHJcbiAgICBjb25zdCBib2R5TWFyZ2luTGVmdCA9IHBhcnNlSW50KGJvZHlDb21wdXRlZFN0eWxlLm1hcmdpbkxlZnQuc2xpY2UoMCwgLTIpLCAxMCk7XHJcblxyXG4gICAgY29uc3QgdG9wVmVydGljYWxQb3NpdGlvbiA9IHJlY3RQb3MudG9wICsgdGhpcy5nZXRTY3JvbGxUb3BWYWx1ZSgpIC0gYm9keU1hcmdpblRvcDtcclxuXHJcbiAgICBpZiAodG9wVmVydGljYWxQb3NpdGlvbiA+IHRoaXMuZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgLyAyKSB7XHJcbiAgICAgIC8vIHNob3cgb3ZlciB0aGUgZWxlbWVudFxyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSAodGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAtIHRvcFZlcnRpY2FsUG9zaXRpb24pICsgJ3B4JztcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gJzVweCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzaG93IHVuZGVyIHRoZSBlbGVtZW50XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9ICh0b3BWZXJ0aWNhbFBvc2l0aW9uICsgZWxlbWVudFJlZi5vZmZzZXRIZWlnaHQpICsgJ3B4JztcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gJzVweCc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2NyZWVuVmVydGljYWxQb3NpdGlvbiA9IHJlY3RQb3MudG9wIC0gYm9keU1hcmdpblRvcDtcclxuICAgIGxldCBib2R5VmVydGljYWxQb3NpdGlvbjtcclxuICAgIGlmIChzY3JlZW5WZXJ0aWNhbFBvc2l0aW9uID4gdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAvIDIpIHtcclxuICAgICAgLy8gc2hvdyBvdmVyIHRoZSBlbGVtZW50XHJcbiAgICAgIGJvZHlWZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAtICh0aGlzLmdldFNjcm9sbFRvcFZhbHVlKCkgKyBzY3JlZW5WZXJ0aWNhbFBvc2l0aW9uKTtcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gYm9keVZlcnRpY2FsUG9zaXRpb24gKyAncHgnO1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAnMnB4JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNob3cgdW5kZXIgdGhlIGVsZW1lbnRcclxuICAgICAgYm9keVZlcnRpY2FsUG9zaXRpb24gPSB0aGlzLmdldFNjcm9sbFRvcFZhbHVlKCkgKyBzY3JlZW5WZXJ0aWNhbFBvc2l0aW9uICsgZWxlbWVudFJlZi5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGJvZHlWZXJ0aWNhbFBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gJzJweCc7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHJlY3RQb3MubGVmdCArIHRoaXMuZ2V0U2Nyb2xsTGVmdFZhbHVlKCkgLSBib2R5TWFyZ2luTGVmdCArICdweCc7XHJcblxyXG4gICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBlbGVtZW50UmVmLm9mZnNldFdpZHRoICsgJ3B4JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Nyb2xsVG9wVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Nyb2xsTGVmdFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0ICsgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBjb250ZW50IHRvIGRpc3BsYXkgaW4gdGhlIGNvbnRhaW5lclxyXG4gICAqL1xyXG4gIHNob3coYXNpRHJvd25Eb3duOiBBc2lEcm9wRG93bikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGUgPSBhc2lEcm93bkRvd24uY29udGVudFRlbXBsYXRlO1xyXG4gICAgICBsZXQgdmlzaWJpbGl0eSA9IHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgaWYgKGFzaURyb3duRG93bi5kcm9wRG93bkNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXNpRHJvd25Eb3duLmRyb3BEb3duQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGxldCBkcm9wUmlnaHQgPSB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgaWYgKGRyb3BSaWdodCA+IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdFxyXG4gICAgICAgICAgICArIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgLSAoZHJvcFJpZ2h0IC0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5qZWN0U2VydmljZShzZXJ2aWNlOiBBc2lEcm9wZG93blNlcnZpY2UpIHtcclxuICAgIHRoaXMuYXNpRHJvcERvd25TZXJ2aWNlID0gc2VydmljZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS56SW5kZXggPSBBc2lEcm9wZG93bkNvbnRhaW5lci5CQVNFX0lOREVYICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2FsY3VsV2lkdGgoY2FsY3VsV2lkdGg6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjYWxjdWxXaWR0aCkge1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMucmVmZXJlbmNlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=