ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
264 lines (263 loc) • 25.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, Input, Output, EventEmitter, HostListener, ViewContainerRef, ElementRef, Injector, ComponentFactoryResolver, Renderer2, TemplateRef } from '@angular/core';
import { PopoverComponent } from './popover.component';
import { PopoverOptions } from './popover-options.provider';
import { PopoverComponentOptions } from './popover-component-options.provider';
import * as Positioning from '../core/util/position';
export class PopoverDirective {
/**
* @param {?} _viewContainerRef
* @param {?} _elm
* @param {?} _defaultOptions
* @param {?} _cfr
* @param {?} _renderer
*/
constructor(_viewContainerRef, _elm, _defaultOptions, _cfr, _renderer) {
this._viewContainerRef = _viewContainerRef;
this._elm = _elm;
this._defaultOptions = _defaultOptions;
this._cfr = _cfr;
this._renderer = _renderer;
this._eventListeners = [];
this.onVisibleChange = new EventEmitter(true);
this.onSelect = new EventEmitter();
}
/**
* @return {?}
*/
togglePopover() {
if (!this.popover) {
this.showPopover();
}
else {
this.hidePopover();
}
}
/**
* @param {?} placement
* @return {?}
*/
positionMap(placement) {
switch (placement) {
case 'topLeft':
return 'top-left';
case 'topRight':
return 'top-right';
case 'bottomLeft':
return 'bottom-left';
case 'bottomRight':
return 'bottom-right';
case 'leftTop':
return 'left-top';
case 'leftBottom':
return 'left-bottom';
case 'rightTop':
return 'right-top';
case 'rightBottom':
return 'right-bottom';
case 'fullScreen':
case 'landScape':
return 'bottom';
default:
return placement;
}
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.visible) {
setTimeout(() => {
this.showPopover();
}, 0);
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.hidePopover();
}
/**
* @param {?} event
* @return {?}
*/
onDocumentClick(event) {
if (this.popover &&
!this._elm.nativeElement.contains(event.target) &&
!this.popover.location.nativeElement.contains(event.target)) {
this.hidePopover();
}
}
/**
* @return {?}
*/
showPopover() {
if (!this.popover) {
setTimeout(() => {
this._eventListeners = [
this._renderer.listen('document', 'click', (event) => this.onDocumentClick(event)),
this._renderer.listen('document', 'touchend', (event) => this.onDocumentClick(event)),
this._renderer.listen('window', 'resize', () => this.positionPopover())
];
});
/** @type {?} */
const options = new PopoverComponentOptions();
options.placement = this.placement;
Object.assign(options, this._defaultOptions, {
hidePopover: (event) => {
this.hidePopover();
},
onAfterViewInit: () => {
this.positionPopover();
/** @type {?} */
const children = document.getElementsByClassName('am-popover-inner-wrapper')[0].children;
if (children.length > 0) {
// 首先我们检查它是否包含子节点
for (let i = 0; i < children.length; i++) {
children[i].id = `${i}`;
children[i].addEventListener('click', () => {
if (this.onSelect) {
this.onSelect.emit(children[i]);
this.hidePopover();
}
}, false);
}
}
}
});
/** @type {?} */
const optionalParams = [
'mask',
'showArrow',
'placement',
'appendToBody',
'overlay'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const componentFactory = this._cfr.resolveComponentFactory(PopoverComponent);
/** @type {?} */
const childInjector = Injector.create([
{
provide: PopoverComponentOptions,
useValue: options
}
], this._viewContainerRef.parentInjector);
this.popover = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options.appendToBody) {
document.body.appendChild(this.popover.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
}
/**
* @return {?}
*/
positionPopover() {
if (this.popover) {
/** @type {?} */
const popoverElement = this.popover.location.nativeElement.children[1];
/** @type {?} */
const popoverPosition = Positioning.getPositionElements(this._elm.nativeElement, popoverElement, this.positionMap(this.placement) || this._defaultOptions.placement, this.appendToBody || this._defaultOptions.appendToBody);
if (this.placement === 'landScape') {
this._renderer.setStyle(popoverElement, 'top', `${popoverPosition.top}px`);
this._renderer.setStyle(popoverElement, 'left', `0px`);
this._renderer.setStyle(popoverElement, 'width', `${window.innerWidth}px`);
this._renderer.setStyle(popoverElement, 'max-height', `${window.innerHeight - popoverPosition.height}px`);
}
else if (this.placement === 'fullScreen') {
this._renderer.setStyle(popoverElement, 'top', `${0}px`);
this._renderer.setStyle(popoverElement, 'left', `0px`);
this._renderer.setStyle(popoverElement, 'width', `${window.innerWidth}px`);
this._renderer.setStyle(popoverElement, 'max-height', `${window.innerHeight - popoverPosition.height}px`);
}
else {
this._renderer.setStyle(popoverElement, 'top', `${popoverPosition.top}px`);
this._renderer.setStyle(popoverElement, 'left', `${popoverPosition.left}px`);
}
}
}
/**
* @return {?}
*/
hidePopover() {
if (this.popover) {
this.popover.destroy();
delete this.popover;
this.onVisibleChange.emit(false);
this._eventListeners.forEach(fn => fn());
this._eventListeners = [];
}
}
}
PopoverDirective.decorators = [
{ type: Directive, args: [{
selector: '[Popover], [nzm-popover]',
providers: [PopoverOptions]
},] }
];
/** @nocollapse */
PopoverDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: PopoverOptions },
{ type: ComponentFactoryResolver },
{ type: Renderer2 }
];
PopoverDirective.propDecorators = {
mask: [{ type: Input }],
showArrow: [{ type: Input }],
visible: [{ type: Input }],
placement: [{ type: Input }],
overlay: [{ type: Input }],
onVisibleChange: [{ type: Output }],
onSelect: [{ type: Output }],
appendToBody: [{ type: Input }],
togglePopover: [{ type: HostListener, args: ['click',] }]
};
if (false) {
/** @type {?} */
PopoverDirective.prototype.popover;
/** @type {?} */
PopoverDirective.prototype._eventListeners;
/** @type {?} */
PopoverDirective.prototype.mask;
/** @type {?} */
PopoverDirective.prototype.showArrow;
/** @type {?} */
PopoverDirective.prototype.visible;
/** @type {?} */
PopoverDirective.prototype.placement;
/** @type {?} */
PopoverDirective.prototype.overlay;
/** @type {?} */
PopoverDirective.prototype.onVisibleChange;
/** @type {?} */
PopoverDirective.prototype.onSelect;
/** @type {?} */
PopoverDirective.prototype.appendToBody;
/** @type {?} */
PopoverDirective.prototype._viewContainerRef;
/** @type {?} */
PopoverDirective.prototype._elm;
/** @type {?} */
PopoverDirective.prototype._defaultOptions;
/** @type {?} */
PopoverDirective.prototype._cfr;
/** @type {?} */
PopoverDirective.prototype._renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInBvcG92ZXIvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUNaLGdCQUFnQixFQUdoQixVQUFVLEVBRVYsUUFBUSxFQUNSLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsV0FBVyxFQUdaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBTXJELE1BQU07Ozs7Ozs7O0lBK0JKLFlBQ1UsbUJBQ0EsTUFDQSxpQkFDQSxNQUNBO1FBSkEsc0JBQWlCLEdBQWpCLGlCQUFpQjtRQUNqQixTQUFJLEdBQUosSUFBSTtRQUNKLG9CQUFlLEdBQWYsZUFBZTtRQUNmLFNBQUksR0FBSixJQUFJO1FBQ0osY0FBUyxHQUFULFNBQVM7K0JBakMwQixFQUFFOytCQWFOLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFFakMsSUFBSSxZQUFZLEVBQUU7S0FtQjVDOzs7O0lBZEosYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO0tBQ0Y7Ozs7O0lBVUQsV0FBVyxDQUFDLFNBQVM7UUFDbkIsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxTQUFTO2dCQUNa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QUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQzNCOzs7O1lBek1KLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7YUFDNUI7Ozs7WUFwQkMsZ0JBQWdCO1lBR2hCLFVBQVU7WUFVSCxjQUFjO1lBUHJCLHdCQUF3QjtZQUN4QixTQUFTOzs7bUJBbUJSLEtBQUs7d0JBRUwsS0FBSztzQkFFTCxLQUFLO3dCQUVMLEtBQUs7c0JBRUwsS0FBSzs4QkFFTCxNQUFNO3VCQUVOLE1BQU07MkJBRU4sS0FBSzs0QkFHTCxZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgT25EZXN0cm95LFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG4gIEluamVjdG9yLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyT3B0aW9ucyB9IGZyb20gJy4vcG9wb3Zlci1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnRPcHRpb25zIH0gZnJvbSAnLi9wb3BvdmVyLWNvbXBvbmVudC1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCAqIGFzIFBvc2l0aW9uaW5nIGZyb20gJy4uL2NvcmUvdXRpbC9wb3NpdGlvbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tQb3BvdmVyXSwgW256bS1wb3BvdmVyXScsXG4gIHByb3ZpZGVyczogW1BvcG92ZXJPcHRpb25zXVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwb3BvdmVyOiBDb21wb25lbnRSZWY8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgc2hvd0Fycm93OiBib29sZWFuO1xuICBASW5wdXQoKVxuICB2aXNpYmxlOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgb3ZlcmxheTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpXG4gIG9uVmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgQE91dHB1dCgpXG4gIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KClcbiAgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgdG9nZ2xlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9wb3Zlcikge1xuICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9lbG06IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IFBvcG92ZXJPcHRpb25zLFxuICAgIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIHBvc2l0aW9uTWFwKHBsYWNlbWVudCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ3RvcExlZnQnOlxuICAgICAgICByZXR1cm4gJ3RvcC1sZWZ0JztcbiAgICAgIGNhc2UgJ3RvcFJpZ2h0JzpcbiAgICAgICAgcmV0dXJuICd0b3AtcmlnaHQnO1xuICAgICAgY2FzZSAnYm90dG9tTGVmdCc6XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgICAgY2FzZSAnYm90dG9tUmlnaHQnOlxuICAgICAgICByZXR1cm4gJ2JvdHRvbS1yaWdodCc7XG4gICAgICBjYXNlICdsZWZ0VG9wJzpcbiAgICAgICAgcmV0dXJuICdsZWZ0LXRvcCc7XG4gICAgICBjYXNlICdsZWZ0Qm90dG9tJzpcbiAgICAgICAgcmV0dXJuICdsZWZ0LWJvdHRvbSc7XG4gICAgICBjYXNlICdyaWdodFRvcCc6XG4gICAgICAgIHJldHVybiAncmlnaHQtdG9wJztcbiAgICAgIGNhc2UgJ3JpZ2h0Qm90dG9tJzpcbiAgICAgICAgcmV0dXJuICdyaWdodC1ib3R0b20nO1xuICAgICAgY2FzZSAnZnVsbFNjcmVlbic6XG4gICAgICBjYXNlICdsYW5kU2NhcGUnOlxuICAgICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dQb3BvdmVyKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBvcG92ZXIgJiZcbiAgICAgICF0aGlzLl9lbG0ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5wb3BvdmVyLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1BvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4gdGhpcy5vbkRvY3VtZW50Q2xpY2soZXZlbnQpKSxcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3RvdWNoZW5kJywgKGV2ZW50OiBFdmVudCkgPT4gdGhpcy5vbkRvY3VtZW50Q2xpY2soZXZlbnQpKSxcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpKVxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgUG9wb3ZlckNvbXBvbmVudE9wdGlvbnMoKTtcbiAgICAgIG9wdGlvbnMucGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnQ7XG4gICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHRoaXMuX2RlZmF1bHRPcHRpb25zLCB7XG4gICAgICAgIGhpZGVQb3BvdmVyOiAoZXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJWaWV3SW5pdDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyKCk7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbS1wb3BvdmVyLWlubmVyLXdyYXBwZXInKVswXS5jaGlsZHJlbjtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8g6aaW5YWI5oiR5Lus5qOA5p+l5a6D5piv5ZCm5YyF5ZCr5a2Q6IqC54K5XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlkID0gYCR7aX1gO1xuICAgICAgICAgICAgICBjaGlsZHJlbltpXS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvcHRpb25hbFBhcmFtczogQXJyYXk8a2V5b2YgUG9wb3ZlckRpcmVjdGl2ZT4gPSBbXG4gICAgICAgICdtYXNrJyxcbiAgICAgICAgJ3Nob3dBcnJvdycsXG4gICAgICAgICdwbGFjZW1lbnQnLFxuICAgICAgICAnYXBwZW5kVG9Cb2R5JyxcbiAgICAgICAgJ292ZXJsYXknXG4gICAgICBdO1xuICAgICAgb3B0aW9uYWxQYXJhbXMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1twYXJhbV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgKG9wdGlvbnMgYXMgYW55KVtwYXJhbV0gPSB0aGlzW3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8UG9wb3ZlckNvbXBvbmVudD4gPSB0aGlzLl9jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoUG9wb3ZlckNvbXBvbmVudCk7XG4gICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogUG9wb3ZlckNvbXBvbmVudE9wdGlvbnMsXG4gICAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvclxuICAgICAgKTtcbiAgICAgIHRoaXMucG9wb3ZlciA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICBjb21wb25lbnRGYWN0b3J5LFxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aCxcbiAgICAgICAgY2hpbGRJbmplY3RvclxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zLmFwcGVuZFRvQm9keSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucG9wb3Zlci5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvblBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9wb3Zlcikge1xuICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLnBvcG92ZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jaGlsZHJlblsxXTtcbiAgICAgIGNvbnN0IHBvcG92ZXJQb3NpdGlvbiA9IFBvc2l0aW9uaW5nLmdldFBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgIHRoaXMuX2VsbS5uYXRpdmVFbGVtZW50LFxuICAgICAgICBwb3BvdmVyRWxlbWVudCxcbiAgICAgICAgdGhpcy5wb3NpdGlvbk1hcCh0aGlzLnBsYWNlbWVudCkgfHwgdGhpcy5fZGVmYXVsdE9wdGlvbnMucGxhY2VtZW50LFxuICAgICAgICB0aGlzLmFwcGVuZFRvQm9keSB8fCB0aGlzLl9kZWZhdWx0T3B0aW9ucy5hcHBlbmRUb0JvZHlcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5wbGFjZW1lbnQgPT09ICdsYW5kU2NhcGUnKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAndG9wJywgYCR7cG9wb3ZlclBvc2l0aW9uLnRvcH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ2xlZnQnLCBgMHB4YCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAnd2lkdGgnLCBgJHt3aW5kb3cuaW5uZXJXaWR0aH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ21heC1oZWlnaHQnLCBgJHt3aW5kb3cuaW5uZXJIZWlnaHQgLSBwb3BvdmVyUG9zaXRpb24uaGVpZ2h0fXB4YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGxhY2VtZW50ID09PSAnZnVsbFNjcmVlbicpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICd0b3AnLCBgJHswfXB4YCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAnbGVmdCcsIGAwcHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICd3aWR0aCcsIGAke3dpbmRvdy5pbm5lcldpZHRofXB4YCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAnbWF4LWhlaWdodCcsIGAke3dpbmRvdy5pbm5lckhlaWdodCAtIHBvcG92ZXJQb3NpdGlvbi5oZWlnaHR9cHhgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAndG9wJywgYCR7cG9wb3ZlclBvc2l0aW9uLnRvcH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ2xlZnQnLCBgJHtwb3BvdmVyUG9zaXRpb24ubGVmdH1weGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGlkZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9wb3Zlcikge1xuICAgICAgdGhpcy5wb3BvdmVyLmRlc3Ryb3koKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnBvcG92ZXI7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtdO1xuICAgIH1cbiAgfVxufVxuIl19