@uex/web-extensions
Version:
Uex extensions for Angular 6+ web projects
393 lines • 23.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/modules/popover/popover.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, Input } from '@angular/core';
import * as _ from 'lodash';
import PopperJS from 'popper.js';
import { ResizeSensor } from 'css-element-queries';
var PopoverComponent = /** @class */ (function () {
function PopoverComponent(elementRef) {
this.elementRef = elementRef;
this._visible = false;
this._placement = 'bottom-start';
this._use_target_width = false;
this._use_target_min_width = false;
this._default_size = {
width: null,
minWidth: null,
maxHeight: null
};
this.size = _.clone(this._default_size);
}
Object.defineProperty(PopoverComponent.prototype, "target", {
get: /**
* @return {?}
*/
function () { return this._target; },
set: /**
* @param {?} target
* @return {?}
*/
function (target) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._target = target;
_this.update();
}));
},
enumerable: true,
configurable: true
});
Object.defineProperty(PopoverComponent.prototype, "visible", {
get: /**
* @return {?}
*/
function () { return this._visible; },
set: /**
* @param {?} visible
* @return {?}
*/
function (visible) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._visible = visible;
_this._updatePopper();
}));
},
enumerable: true,
configurable: true
});
Object.defineProperty(PopoverComponent.prototype, "placement", {
get: /**
* @return {?}
*/
function () { return this._placement; },
set: /**
* @param {?} placement
* @return {?}
*/
function (placement) { this._placement = placement; this.update(); },
enumerable: true,
configurable: true
});
Object.defineProperty(PopoverComponent.prototype, "useTargetWidth", {
get: /**
* @return {?}
*/
function () { return this._use_target_width; },
set: /**
* @param {?} use
* @return {?}
*/
function (use) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._use_target_width = use;
_this.update();
}));
},
enumerable: true,
configurable: true
});
Object.defineProperty(PopoverComponent.prototype, "useTargetMinWidth", {
get: /**
* @return {?}
*/
function () { return this._use_target_min_width; },
set: /**
* @param {?} use
* @return {?}
*/
function (use) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._use_target_min_width = use;
_this.update();
}));
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
PopoverComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
this._resize_sensor = new ResizeSensor(this.elementRef.nativeElement, (/**
* @return {?}
*/
function () { return _this._updatePopper(); }));
};
/**
* @return {?}
*/
PopoverComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this._resize_sensor) {
this._resize_sensor.detach();
}
if (this._popper) {
this._popper.destroy();
}
};
/**
* @return {?}
*/
PopoverComponent.prototype.show = /**
* @return {?}
*/
function () {
this.visible = true;
};
/**
* @return {?}
*/
PopoverComponent.prototype.hide = /**
* @return {?}
*/
function () {
this.visible = false;
};
/**
* @return {?}
*/
PopoverComponent.prototype.update = /**
* @return {?}
*/
function () {
if (!this.visible) {
return;
}
this._setPopper();
};
/**
* @private
* @return {?}
*/
PopoverComponent.prototype._setPopper = /**
* @private
* @return {?}
*/
function () {
var _this = this;
if (this._popper) {
this._popper.destroy();
this._popper = null;
}
/** @type {?} */
var target = this._getTarget();
if (!target) {
return;
}
setTimeout((/**
* @return {?}
*/
function () {
_this._popper = new PopperJS(target, _this.elementRef.nativeElement, {
placement: _this._placement,
positionFixed: true,
onUpdate: (/**
* @return {?}
*/
function () { return _this._setSize(); })
});
_this._popper.update();
}));
};
/**
* @private
* @return {?}
*/
PopoverComponent.prototype._updatePopper = /**
* @private
* @return {?}
*/
function () {
if (this._popper) {
this._popper.update();
}
else {
this._setPopper();
}
};
/**
* @private
* @return {?}
*/
PopoverComponent.prototype._setSize = /**
* @private
* @return {?}
*/
function () {
if (!this.target) {
return;
}
this.size = _.clone(this._default_size);
/** @type {?} */
var target = this._getTarget();
/** @type {?} */
var target_rect = target.getBoundingClientRect();
if (this.useTargetWidth) {
this.size.width = target_rect.width;
}
if (this.useTargetMinWidth) {
this.size.minWidth = target_rect.width;
}
this._setMaxHeight();
};
/**
* @private
* @return {?}
*/
PopoverComponent.prototype._setMaxHeight = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var scroll_parent = this._getScrollParent();
if (!scroll_parent) {
return;
}
/** @type {?} */
var parent_rect = scroll_parent.getBoundingClientRect();
this.size.maxHeight = parent_rect.height * 0.8;
};
/**
* @private
* @return {?}
*/
PopoverComponent.prototype._getTarget = /**
* @private
* @return {?}
*/
function () {
return this.target.elementRef ? this.target.elementRef.nativeElement : this.target;
};
/**
* @private
* @param {?=} node
* @return {?}
*/
PopoverComponent.prototype._getScrollParent = /**
* @private
* @param {?=} node
* @return {?}
*/
function (node) {
if (node === void 0) { node = this.elementRef.nativeElement; }
if (node == null) {
return null;
}
if (node != this.elementRef.nativeElement && node.scrollHeight > node.clientHeight) {
return node;
}
else {
return this._getScrollParent(node.parentNode);
}
};
PopoverComponent.decorators = [
{ type: Component, args: [{
selector: 'uex-popover',
template: '<ng-content></ng-content>',
host: {
class: 'uex-popover',
'[class.visible]': 'visible',
'[style.width.px]': 'size.width',
'[style.min-width.px]': 'size.minWidth',
'[style.max-height.px]': 'size.maxHeight'
}
}] }
];
/** @nocollapse */
PopoverComponent.ctorParameters = function () { return [
{ type: ElementRef }
]; };
PopoverComponent.propDecorators = {
target: [{ type: Input }],
visible: [{ type: Input }],
placement: [{ type: Input }],
useTargetWidth: [{ type: Input }],
useTargetMinWidth: [{ type: Input }]
};
return PopoverComponent;
}());
export { PopoverComponent };
if (false) {
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._popper;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._target;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._visible;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._placement;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._use_target_width;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._use_target_min_width;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._resize_sensor;
/**
* @type {?}
* @private
*/
PopoverComponent.prototype._default_size;
/** @type {?} */
PopoverComponent.prototype.size;
/** @type {?} */
PopoverComponent.prototype.elementRef;
}
/**
* @record
*/
export function IPopoverSize() { }
if (false) {
/** @type {?} */
IPopoverSize.prototype.width;
/** @type {?} */
IPopoverSize.prototype.minWidth;
/** @type {?} */
IPopoverSize.prototype.maxHeight;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWV4L3dlYi1leHRlbnNpb25zLyIsInNvdXJjZXMiOlsibGliL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRDtJQWlERSwwQkFDUyxVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBS3ZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUF1QixjQUFjLENBQUM7UUFDaEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUc5QixrQkFBYSxHQUFpQjtZQUNwQyxLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUNLLFNBQUksR0FBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFmcEQsQ0FBQztJQXRDTCxzQkFDTSxvQ0FBTTs7OztRQU1WLGNBQW9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Ozs7O1FBUDVDLFVBQ2EsTUFBVztZQUR4QixpQkFNRztZQUpDLFVBQVU7OztZQUFDO2dCQUNULEtBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDOzs7T0FBQTtJQUVILHNCQUNNLHFDQUFPOzs7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Qjs7Ozs7O0lBMEMzQixtQ0FBMEI7Ozs7O0lBQzFCLG1DQUFxQjs7Ozs7SUFDckIsb0NBQXlCOzs7OztJQUN6QixzQ0FBd0Q7Ozs7O0lBQ3hELDZDQUFrQzs7Ozs7SUFDbEMsaURBQXNDOzs7OztJQUN0QywwQ0FBcUM7Ozs7O0lBRXJDLHlDQUlFOztJQUNGLGdDQUF3RDs7SUFoQnRELHNDQUE2Qjs7Ozs7QUErR2pDLGtDQUlDOzs7SUFIQyw2QkFBYzs7SUFDZCxnQ0FBaUI7O0lBQ2pCLGlDQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgUG9wcGVySlMgZnJvbSAncG9wcGVyLmpzJztcclxuaW1wb3J0IHsgUmVzaXplU2Vuc29yIH0gZnJvbSAnY3NzLWVsZW1lbnQtcXVlcmllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VleC1wb3BvdmVyJyxcclxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAndWV4LXBvcG92ZXInLFxyXG4gICAgJ1tjbGFzcy52aXNpYmxlXSc6ICd2aXNpYmxlJyxcclxuICAgICdbc3R5bGUud2lkdGgucHhdJzogJ3NpemUud2lkdGgnLFxyXG4gICAgJ1tzdHlsZS5taW4td2lkdGgucHhdJzogJ3NpemUubWluV2lkdGgnLFxyXG4gICAgJ1tzdHlsZS5tYXgtaGVpZ2h0LnB4XSc6ICdzaXplLm1heEhlaWdodCdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KClcclxuICAgIHNldCB0YXJnZXQodGFyZ2V0OiBhbnkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHRhcmdldCgpOiBhbnkgeyByZXR1cm4gdGhpcy5fdGFyZ2V0OyB9XHJcbiAgQElucHV0KClcclxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wcGVyKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl92aXNpYmxlOyB9XHJcbiAgQElucHV0KClcclxuICAgIHNldCBwbGFjZW1lbnQocGxhY2VtZW50OiBQb3BwZXJKUy5QbGFjZW1lbnQpIHsgdGhpcy5fcGxhY2VtZW50ID0gcGxhY2VtZW50OyB0aGlzLnVwZGF0ZSgpOyB9XHJcbiAgICBnZXQgcGxhY2VtZW50KCk6IFBvcHBlckpTLlBsYWNlbWVudCB7IHJldHVybiB0aGlzLl9wbGFjZW1lbnQ7IH1cclxuICBASW5wdXQoKVxyXG4gICAgc2V0IHVzZVRhcmdldFdpZHRoKHVzZTogYm9vbGVhbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl91c2VfdGFyZ2V0X3dpZHRoID0gdXNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZVRhcmdldFdpZHRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdXNlX3RhcmdldF93aWR0aDsgfVxyXG4gIEBJbnB1dCgpXHJcbiAgICBzZXQgdXNlVGFyZ2V0TWluV2lkdGgodXNlOiBib29sZWFuKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3VzZV90YXJnZXRfbWluX3dpZHRoID0gdXNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZVRhcmdldE1pbldpZHRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdXNlX3RhcmdldF9taW5fd2lkdGg7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgX3BvcHBlcjogUG9wcGVySlM7XHJcbiAgcHJpdmF0ZSBfdGFyZ2V0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmlzaWJsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BsYWNlbWVudDogUG9wcGVySlMuUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XHJcbiAgcHJpdmF0ZSBfdXNlX3RhcmdldF93aWR0aCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3VzZV90YXJnZXRfbWluX3dpZHRoID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVzaXplX3NlbnNvcjogUmVzaXplU2Vuc29yO1xyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0X3NpemU6IElQb3BvdmVyU2l6ZSA9IHtcclxuICAgIHdpZHRoOiBudWxsLFxyXG4gICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICBtYXhIZWlnaHQ6IG51bGxcclxuICB9O1xyXG4gIHB1YmxpYyBzaXplOiBJUG9wb3ZlclNpemUgPSBfLmNsb25lKHRoaXMuX2RlZmF1bHRfc2l6ZSk7XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl9yZXNpemVfc2Vuc29yID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgKCkgPT4gdGhpcy5fdXBkYXRlUG9wcGVyKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZV9zZW5zb3IpIHsgdGhpcy5fcmVzaXplX3NlbnNvci5kZXRhY2goKTsgfVxyXG4gICAgaWYgKHRoaXMuX3BvcHBlcikgeyB0aGlzLl9wb3BwZXIuZGVzdHJveSgpOyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvdygpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZSgpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZSgpIHtcclxuICAgIGlmICghdGhpcy52aXNpYmxlKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy5fc2V0UG9wcGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRQb3BwZXIoKSB7XHJcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XHJcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXJKUyh0YXJnZXQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLl9wbGFjZW1lbnQsXHJcbiAgICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZSxcclxuICAgICAgICBvblVwZGF0ZTogKCkgPT4gdGhpcy5fc2V0U2l6ZSgpXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVBvcHBlcigpIHtcclxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcclxuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2V0UG9wcGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhcmdldCkgeyByZXR1cm47IH1cclxuXHJcbiAgICB0aGlzLnNpemUgPSBfLmNsb25lKHRoaXMuX2RlZmF1bHRfc2l6ZSk7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KCk7XHJcbiAgICBjb25zdCB0YXJnZXRfcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VUYXJnZXRXaWR0aCkge1xyXG4gICAgICB0aGlzLnNpemUud2lkdGggPSB0YXJnZXRfcmVjdC53aWR0aDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVzZVRhcmdldE1pbldpZHRoKSB7XHJcbiAgICAgIHRoaXMuc2l6ZS5taW5XaWR0aCA9IHRhcmdldF9yZWN0LndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NldE1heEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TWF4SGVpZ2h0KCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsX3BhcmVudCA9IHRoaXMuX2dldFNjcm9sbFBhcmVudCgpO1xyXG4gICAgaWYgKCFzY3JvbGxfcGFyZW50KSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IHBhcmVudF9yZWN0ID0gc2Nyb2xsX3BhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHRoaXMuc2l6ZS5tYXhIZWlnaHQgPSBwYXJlbnRfcmVjdC5oZWlnaHQgKiAwLjg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRUYXJnZXQoKTogSFRNTEVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LmVsZW1lbnRSZWYgPyB0aGlzLnRhcmdldC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnRhcmdldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFNjcm9sbFBhcmVudChub2RlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgIGlmIChub2RlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUgIT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgbm9kZS5zY3JvbGxIZWlnaHQgPiBub2RlLmNsaWVudEhlaWdodCkge1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9nZXRTY3JvbGxQYXJlbnQobm9kZS5wYXJlbnROb2RlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBvcG92ZXJTaXplIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIG1pbldpZHRoOiBudW1iZXI7XHJcbiAgbWF4SGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuIl19