@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
191 lines (190 loc) • 20.9 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/common';
export class AsiDropdownContainer {
/**
* @param {?} document
* @param {?} renderer
* @param {?} elementRef
*/
constructor(document, renderer, elementRef) {
this.document = document;
this.renderer = renderer;
this.elementRef = elementRef;
this.calculWidth = true;
this.subjectContainer = new Subject();
}
/**
* @param {?} event
* @return {?}
*/
documentClick(event) {
if (!this.drop.nativeElement.contains(event.target)) {
this.asiDropDownService.canClose(this.index, this.canClose).subscribe(close => {
if (close) {
setTimeout(() => {
this.close();
});
}
});
}
}
/**
* @return {?}
*/
close() {
this.subjectContainer.next(this);
this.subjectContainer.complete();
}
/**
* @return {?}
*/
onClose() {
return this.subjectContainer.asObservable();
}
/**
* Move the container under htmlElement
* @param {?} relativeTo The parent HTMLElement of the dropdown
* @return {?}
*/
forElement(relativeTo) {
this.referenceElement = relativeTo;
/** @type {?} */
const rectRelativeTo = relativeTo.getBoundingClientRect();
/** @type {?} */
const bodyComputedStyle = getComputedStyle(this.document.body);
/** @type {?} */
const bodyMarginTop = parseInt(bodyComputedStyle.marginTop.slice(0, -2), 10);
/** @type {?} */
const parentComputedStyle = getComputedStyle(this.elementRef.nativeElement);
/** @type {?} */
const parentMarginTop = parseInt(parentComputedStyle.marginTop.slice(0, -2), 10);
/** @type {?} */
const parentMarginLeft = parseInt(parentComputedStyle.marginLeft.slice(0, -2), 10);
/** @type {?} */
const rectElement = this.elementRef.nativeElement.getBoundingClientRect();
/** @type {?} */
const screenVerticalPosition = rectRelativeTo.top - bodyMarginTop;
if (screenVerticalPosition > this.document.body.clientHeight / 2) {
/** @type {?} */
const bodyVerticalPosition = rectElement.bottom - rectRelativeTo.top + parentMarginTop;
this.drop.nativeElement.style.bottom = bodyVerticalPosition + 'px';
this.drop.nativeElement.style.marginBottom = '2px';
}
else {
/** @type {?} */
const bodyVerticalPosition = -rectElement.top + rectRelativeTo.top - parentMarginTop + relativeTo.offsetHeight;
this.drop.nativeElement.style.top = bodyVerticalPosition + 'px';
this.drop.nativeElement.style.marginTop = '2px';
}
this.drop.nativeElement.style.left = rectRelativeTo.left - rectElement.left - parentMarginLeft + 'px';
this.drop.nativeElement.style.width = relativeTo.offsetWidth + 'px';
}
/**
* @param {?} asiDrownDown The content to display in the container
* @return {?}
*/
show(asiDrownDown) {
setTimeout(() => {
this.template = asiDrownDown.contentTemplate;
/** @type {?} */
let visibility = this.drop.nativeElement.style.visibility;
this.drop.nativeElement.style.visibility = 'hidden';
if (asiDrownDown.dropDownClass) {
this.renderer.addClass(this.elementRef.nativeElement, asiDrownDown.dropDownClass);
}
setTimeout(() => {
/** @type {?} */
const dropContainer = this.drop.nativeElement.getBoundingClientRect();
if (dropContainer.right > this.document.documentElement.clientWidth) {
this.drop.nativeElement.style.left =
(this.drop.nativeElement.offsetLeft - dropContainer.right + this.document.documentElement.clientWidth) + 'px';
}
/** @type {?} */
let 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 {?}
*/
injectService(service) {
this.asiDropDownService = service;
}
/**
* @param {?} index
* @return {?}
*/
setIndex(index) {
this.index = index;
this.elementRef.nativeElement.style.zIndex = AsiDropdownContainer.BASE_INDEX + index;
}
/**
* @param {?} calculWidth
* @return {?}
*/
setCalculWidth(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 = () => [
{ 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'],] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRyb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWRyb3Bkb3duL2NvbnRhaW5lci9hc2ktZHJvcGRvd24tY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8zQyxNQUFNOzs7Ozs7SUFrQkosWUFBc0MsUUFBYSxFQUFVLFFBQW1CLEVBQVUsVUFBc0I7UUFBMUUsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZOzJCQVh6RixJQUFJO2dDQUkrQixJQUFJLE9BQU8sRUFBRTtLQU82Qzs7Ozs7SUFHcEgsYUFBYSxDQUFDLEtBQWlCO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7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QUFDLFFBQVE7WUE3QjVCLFNBQVM7WUFMVCxVQUFVOzs7MEJBdUJULEtBQUs7bUJBRUwsU0FBUyxTQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7NEJBV3RDLFlBQVksU0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzaURyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uL2FzaS1kcm9wZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBUZW1wbGF0ZVJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBSZW5kZXJlcjIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXNpRHJvcERvd24gfSBmcm9tICcuLi9hc2ktZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhc2ktZHJvcGRvd24tY29udGFpbmVyJyxcclxuICBob3N0OiB7ICdjbGFzcyc6ICdhc2ktY29tcG9uZW50IGFzaS1kcm9wZG93bi1jb250YWluZXInIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktZHJvcGRvd24tY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNpRHJvcGRvd25Db250YWluZXIge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBCQVNFX0lOREVYID0gMTI1O1xyXG5cclxuICBpbmRleDogbnVtYmVyO1xyXG4gIGNhbkNsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQElucHV0KCkgY2FsY3VsV2lkdGggPSB0cnVlO1xyXG5cclxuICBAVmlld0NoaWxkKCdkcm9wJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRyb3A6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgc3ViamVjdENvbnRhaW5lcjogU3ViamVjdDxBc2lEcm9wZG93bkNvbnRhaW5lcj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIGFzaURyb3BEb3duU2VydmljZTogQXNpRHJvcGRvd25TZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHJpdmF0ZSByZWZlcmVuY2VFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgZG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuYXNpRHJvcERvd25TZXJ2aWNlLmNhbkNsb3NlKHRoaXMuaW5kZXgsIHRoaXMuY2FuQ2xvc2UpLnN1YnNjcmliZShjbG9zZSA9PiB7XHJcbiAgICAgICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLnN1YmplY3RDb250YWluZXIubmV4dCh0aGlzKTtcclxuICAgIHRoaXMuc3ViamVjdENvbnRhaW5lci5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2UgZXZlbnQgd2hlbiBjbGljayBvdXRzaWRlXHJcbiAgb25DbG9zZSgpOiBPYnNlcnZhYmxlPEFzaURyb3Bkb3duQ29udGFpbmVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0Q29udGFpbmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTW92ZSB0aGUgY29udGFpbmVyIHVuZGVyIGh0bWxFbGVtZW50XHJcbiAgICogQHBhcmFtIHJlbGF0aXZlVG8gVGhlIHBhcmVudCBIVE1MRWxlbWVudCBvZiB0aGUgZHJvcGRvd25cclxuICAgKi9cclxuICBmb3JFbGVtZW50KHJlbGF0aXZlVG86IGFueSkge1xyXG4gICAgdGhpcy5yZWZlcmVuY2VFbGVtZW50ID0gcmVsYXRpdmVUbztcclxuXHJcbiAgICBjb25zdCByZWN0UmVsYXRpdmVUbyA9IHJlbGF0aXZlVG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBjb21wdXRlZCBjbGFzcyBtYXJnaW4gKGZyb20gYm90aCBzdHlsZSArIGNzcyBjbGFzcylcclxuICAgIGNvbnN0IGJvZHlDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHkpO1xyXG4gICAgY29uc3QgYm9keU1hcmdpblRvcCA9IHBhcnNlSW50KGJvZHlDb21wdXRlZFN0eWxlLm1hcmdpblRvcC5zbGljZSgwLCAtMiksIDEwKTtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGNvbXB1dGVkIGNsYXNzIG1hcmdpbiAoZnJvbSBib3RoIHN0eWxlICsgY3NzIGNsYXNzKVxyXG4gICAgY29uc3QgcGFyZW50Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudE1hcmdpblRvcCA9IHBhcnNlSW50KHBhcmVudENvbXB1dGVkU3R5bGUubWFyZ2luVG9wLnNsaWNlKDAsIC0yKSwgMTApO1xyXG4gICAgY29uc3QgcGFyZW50TWFyZ2luTGVmdCA9IHBhcnNlSW50KHBhcmVudENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdC5zbGljZSgwLCAtMiksIDEwKTtcclxuXHJcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGNvbnN0IHNjcmVlblZlcnRpY2FsUG9zaXRpb24gPSByZWN0UmVsYXRpdmVUby50b3AgLSBib2R5TWFyZ2luVG9wO1xyXG4gICAgaWYgKHNjcmVlblZlcnRpY2FsUG9zaXRpb24gPiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0IC8gMikge1xyXG4gICAgICAvLyBzaG93IG92ZXIgdGhlIGVsZW1lbnRcclxuICAgICAgY29uc3QgYm9keVZlcnRpY2FsUG9zaXRpb24gPSByZWN0RWxlbWVudC5ib3R0b20gLSByZWN0UmVsYXRpdmVUby50b3AgKyBwYXJlbnRNYXJnaW5Ub3A7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IGJvZHlWZXJ0aWNhbFBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gJzJweCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzaG93IHVuZGVyIHRoZSBlbGVtZW50XHJcbiAgICAgIGNvbnN0IGJvZHlWZXJ0aWNhbFBvc2l0aW9uID0gLSByZWN0RWxlbWVudC50b3AgKyByZWN0UmVsYXRpdmVUby50b3AgLSBwYXJlbnRNYXJnaW5Ub3AgKyByZWxhdGl2ZVRvLm9mZnNldEhlaWdodDtcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gYm9keVZlcnRpY2FsUG9zaXRpb24gKyAncHgnO1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AgPSAnMnB4JztcclxuICAgIH1cclxuICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSByZWN0UmVsYXRpdmVUby5sZWZ0IC0gcmVjdEVsZW1lbnQubGVmdCAtIHBhcmVudE1hcmdpbkxlZnQgKyAncHgnO1xyXG5cclxuICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gcmVsYXRpdmVUby5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gYXNpRHJvd25Eb3duIFRoZSBjb250ZW50IHRvIGRpc3BsYXkgaW4gdGhlIGNvbnRhaW5lclxyXG4gICAqL1xyXG4gIHNob3coYXNpRHJvd25Eb3duOiBBc2lEcm9wRG93bikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGUgPSBhc2lEcm93bkRvd24uY29udGVudFRlbXBsYXRlO1xyXG4gICAgICBsZXQgdmlzaWJpbGl0eSA9IHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgaWYgKGFzaURyb3duRG93bi5kcm9wRG93bkNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXNpRHJvd25Eb3duLmRyb3BEb3duQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRyb3BDb250YWluZXIgPSB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBpZiAoZHJvcENvbnRhaW5lci5yaWdodCA+IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID1cclxuICAgICAgICAgICAgKHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSBkcm9wQ29udGFpbmVyLnJpZ2h0ICsgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpICsgJ3B4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkcm9wUmlnaHQgPSB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgaWYgKGRyb3BSaWdodCA+IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdFxyXG4gICAgICAgICAgICArIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgLSAoZHJvcFJpZ2h0IC0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5qZWN0U2VydmljZShzZXJ2aWNlOiBBc2lEcm9wZG93blNlcnZpY2UpIHtcclxuICAgIHRoaXMuYXNpRHJvcERvd25TZXJ2aWNlID0gc2VydmljZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS56SW5kZXggPSBBc2lEcm9wZG93bkNvbnRhaW5lci5CQVNFX0lOREVYICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2FsY3VsV2lkdGgoY2FsY3VsV2lkdGg6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjYWxjdWxXaWR0aCkge1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMucmVmZXJlbmNlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=