@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
229 lines (228 loc) • 22.3 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';
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 relativeTo The parent HTMLElement of the dropdown
*/
/**
* Move the container under htmlElement
* @param {?} relativeTo The parent HTMLElement of the dropdown
* @return {?}
*/
AsiDropdownContainer.prototype.forElement = /**
* Move the container under htmlElement
* @param {?} relativeTo The parent HTMLElement of the dropdown
* @return {?}
*/
function (relativeTo) {
this.referenceElement = relativeTo;
/** @type {?} */
var rectRelativeTo = relativeTo.getBoundingClientRect();
/** @type {?} */
var bodyComputedStyle = getComputedStyle(this.document.body);
/** @type {?} */
var bodyMarginTop = parseInt(bodyComputedStyle.marginTop.slice(0, -2), 10);
/** @type {?} */
var parentComputedStyle = getComputedStyle(this.elementRef.nativeElement);
/** @type {?} */
var parentMarginTop = parseInt(parentComputedStyle.marginTop.slice(0, -2), 10);
/** @type {?} */
var parentMarginLeft = parseInt(parentComputedStyle.marginLeft.slice(0, -2), 10);
/** @type {?} */
var rectElement = this.elementRef.nativeElement.getBoundingClientRect();
/** @type {?} */
var screenVerticalPosition = rectRelativeTo.top - bodyMarginTop;
if (screenVerticalPosition > this.document.body.clientHeight / 2) {
/** @type {?} */
var bodyVerticalPosition = rectElement.bottom - rectRelativeTo.top + parentMarginTop;
this.drop.nativeElement.style.bottom = bodyVerticalPosition + 'px';
this.drop.nativeElement.style.marginBottom = '2px';
}
else {
/** @type {?} */
var 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
*/
/**
* @param {?} asiDrownDown The content to display in the container
* @return {?}
*/
AsiDropdownContainer.prototype.show = /**
* @param {?} asiDrownDown The content to display in the container
* @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 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 {?} */
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRyb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWRyb3Bkb3duL2NvbnRhaW5lci9hc2ktZHJvcGRvd24tY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7SUF5QnpDLDhCQUFzQyxRQUFhLEVBQVUsUUFBbUIsRUFBVSxVQUFzQjtRQUExRSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7MkJBWHpGLElBQUk7Z0NBSStCLElBQUksT0FBTyxFQUFFO0tBTzZDOzs7OztJQUdwSCw0Q0FBYTs7OztJQURiLFVBQ2MsS0FBaUI7UUFEL0IsaUJBV0M7UUFUQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUEsS0FBSztnQkFDekUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDVixVQUFVLENBQUM7d0JBQ1QsS0FBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNkLENB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RUFBRSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRTtvQkFDekQsaUlBQW9EO2lCQUNyRDs7OztnREFtQmMsTUFBTSxTQUFDLFFBQVE7Z0JBN0I1QixTQUFTO2dCQUxULFVBQVU7Ozs4QkF1QlQsS0FBSzt1QkFFTCxTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQ0FXdEMsWUFBWSxTQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDOzsrQkF4QzlDOztTQW9CYSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2lEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuLi9hc2ktZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFzaURyb3BEb3duIH0gZnJvbSAnLi4vYXNpLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXNpLWRyb3Bkb3duLWNvbnRhaW5lcicsXHJcbiAgaG9zdDogeyAnY2xhc3MnOiAnYXNpLWNvbXBvbmVudCBhc2ktZHJvcGRvd24tY29udGFpbmVyJyB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnYXNpLWRyb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzaURyb3Bkb3duQ29udGFpbmVyIHtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQkFTRV9JTkRFWCA9IDEyNTtcclxuXHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBjYW5DbG9zZTogRnVuY3Rpb247XHJcblxyXG4gIEBJbnB1dCgpIGNhbGN1bFdpZHRoID0gdHJ1ZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZHJvcCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wOiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIHN1YmplY3RDb250YWluZXI6IFN1YmplY3Q8QXNpRHJvcGRvd25Db250YWluZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBhc2lEcm9wRG93blNlcnZpY2U6IEFzaURyb3Bkb3duU2VydmljZTtcclxuXHJcbiAgcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHByaXZhdGUgcmVmZXJlbmNlRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnLCBbJyRldmVudCddKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmFzaURyb3BEb3duU2VydmljZS5jYW5DbG9zZSh0aGlzLmluZGV4LCB0aGlzLmNhbkNsb3NlKS5zdWJzY3JpYmUoY2xvc2UgPT4ge1xyXG4gICAgICAgIGlmIChjbG9zZSkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5zdWJqZWN0Q29udGFpbmVyLm5leHQodGhpcyk7XHJcbiAgICB0aGlzLnN1YmplY3RDb250YWluZXIuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8vIENsb3NlIGV2ZW50IHdoZW4gY2xpY2sgb3V0c2lkZVxyXG4gIG9uQ2xvc2UoKTogT2JzZXJ2YWJsZTxBc2lEcm9wZG93bkNvbnRhaW5lcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdENvbnRhaW5lci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdGhlIGNvbnRhaW5lciB1bmRlciBodG1sRWxlbWVudFxyXG4gICAqIEBwYXJhbSByZWxhdGl2ZVRvIFRoZSBwYXJlbnQgSFRNTEVsZW1lbnQgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgZm9yRWxlbWVudChyZWxhdGl2ZVRvOiBhbnkpIHtcclxuICAgIHRoaXMucmVmZXJlbmNlRWxlbWVudCA9IHJlbGF0aXZlVG87XHJcblxyXG4gICAgY29uc3QgcmVjdFJlbGF0aXZlVG8gPSByZWxhdGl2ZVRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIC8vIEdldCB0aGUgY29tcHV0ZWQgY2xhc3MgbWFyZ2luIChmcm9tIGJvdGggc3R5bGUgKyBjc3MgY2xhc3MpXHJcbiAgICBjb25zdCBib2R5Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5KTtcclxuICAgIGNvbnN0IGJvZHlNYXJnaW5Ub3AgPSBwYXJzZUludChib2R5Q29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3Auc2xpY2UoMCwgLTIpLCAxMCk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBjb21wdXRlZCBjbGFzcyBtYXJnaW4gKGZyb20gYm90aCBzdHlsZSArIGNzcyBjbGFzcylcclxuICAgIGNvbnN0IHBhcmVudENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnRNYXJnaW5Ub3AgPSBwYXJzZUludChwYXJlbnRDb21wdXRlZFN0eWxlLm1hcmdpblRvcC5zbGljZSgwLCAtMiksIDEwKTtcclxuICAgIGNvbnN0IHBhcmVudE1hcmdpbkxlZnQgPSBwYXJzZUludChwYXJlbnRDb21wdXRlZFN0eWxlLm1hcmdpbkxlZnQuc2xpY2UoMCwgLTIpLCAxMCk7XHJcblxyXG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBjb25zdCBzY3JlZW5WZXJ0aWNhbFBvc2l0aW9uID0gcmVjdFJlbGF0aXZlVG8udG9wIC0gYm9keU1hcmdpblRvcDtcclxuICAgIGlmIChzY3JlZW5WZXJ0aWNhbFBvc2l0aW9uID4gdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAvIDIpIHtcclxuICAgICAgLy8gc2hvdyBvdmVyIHRoZSBlbGVtZW50XHJcbiAgICAgIGNvbnN0IGJvZHlWZXJ0aWNhbFBvc2l0aW9uID0gcmVjdEVsZW1lbnQuYm90dG9tIC0gcmVjdFJlbGF0aXZlVG8udG9wICsgcGFyZW50TWFyZ2luVG9wO1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBib2R5VmVydGljYWxQb3NpdGlvbiArICdweCc7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcycHgnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc2hvdyB1bmRlciB0aGUgZWxlbWVudFxyXG4gICAgICBjb25zdCBib2R5VmVydGljYWxQb3NpdGlvbiA9IC0gcmVjdEVsZW1lbnQudG9wICsgcmVjdFJlbGF0aXZlVG8udG9wIC0gcGFyZW50TWFyZ2luVG9wICsgcmVsYXRpdmVUby5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGJvZHlWZXJ0aWNhbFBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gJzJweCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gcmVjdFJlbGF0aXZlVG8ubGVmdCAtIHJlY3RFbGVtZW50LmxlZnQgLSBwYXJlbnRNYXJnaW5MZWZ0ICsgJ3B4JztcclxuXHJcbiAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHJlbGF0aXZlVG8ub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGFzaURyb3duRG93biBUaGUgY29udGVudCB0byBkaXNwbGF5IGluIHRoZSBjb250YWluZXJcclxuICAgKi9cclxuICBzaG93KGFzaURyb3duRG93bjogQXNpRHJvcERvd24pIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlID0gYXNpRHJvd25Eb3duLmNvbnRlbnRUZW1wbGF0ZTtcclxuICAgICAgbGV0IHZpc2liaWxpdHkgPSB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5O1xyXG4gICAgICB0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgIGlmIChhc2lEcm93bkRvd24uZHJvcERvd25DbGFzcykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGFzaURyb3duRG93bi5kcm9wRG93bkNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBkcm9wQ29udGFpbmVyID0gdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgaWYgKGRyb3BDb250YWluZXIucmlnaHQgPiB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9XHJcbiAgICAgICAgICAgICh0aGlzLmRyb3AubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gZHJvcENvbnRhaW5lci5yaWdodCArIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSArICdweCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZHJvcFJpZ2h0ID0gdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGlmIChkcm9wUmlnaHQgPiB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnRcclxuICAgICAgICAgICAgKyB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IC0gKGRyb3BSaWdodCAtIHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHJvcC5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluamVjdFNlcnZpY2Uoc2VydmljZTogQXNpRHJvcGRvd25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmFzaURyb3BEb3duU2VydmljZSA9IHNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuekluZGV4ID0gQXNpRHJvcGRvd25Db250YWluZXIuQkFTRV9JTkRFWCArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENhbGN1bFdpZHRoKGNhbGN1bFdpZHRoOiBib29sZWFuKSB7XHJcbiAgICBpZiAoY2FsY3VsV2lkdGgpIHtcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLnJlZmVyZW5jZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kcm9wLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19