ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
372 lines • 30.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,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';
var PopoverDirective = /** @class */ (function () {
function PopoverDirective(_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 {?}
*/
PopoverDirective.prototype.togglePopover = /**
* @return {?}
*/
function () {
if (!this.popover) {
this.showPopover();
}
else {
this.hidePopover();
}
};
/**
* @param {?} placement
* @return {?}
*/
PopoverDirective.prototype.positionMap = /**
* @param {?} placement
* @return {?}
*/
function (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 {?}
*/
PopoverDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
/**
* @param {?} changes
* @return {?}
*/
PopoverDirective.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
if (changes.visible && changes.visible.currentValue) {
setTimeout((/**
* @return {?}
*/
function () {
_this.showPopover();
}), 0);
}
else {
setTimeout((/**
* @return {?}
*/
function () {
_this.hidePopover();
}), 0);
}
};
/**
* @return {?}
*/
PopoverDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.hidePopover();
};
/**
* @private
* @param {?} event
* @return {?}
*/
PopoverDirective.prototype.onDocumentClick = /**
* @private
* @param {?} event
* @return {?}
*/
function (event) {
if (this.popover &&
!this._elm.nativeElement.contains(event.target) &&
!this.popover.location.nativeElement.contains(event.target)) {
this.hidePopover();
}
};
/**
* @private
* @return {?}
*/
PopoverDirective.prototype.showPopover = /**
* @private
* @return {?}
*/
function () {
var _this = this;
if (!this.popover) {
setTimeout((/**
* @return {?}
*/
function () {
_this._eventListeners = [
_this._renderer.listen('document', 'click', (/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.onDocumentClick(event); })),
_this._renderer.listen('document', 'touchend', (/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.onDocumentClick(event); })),
_this._renderer.listen('window', 'resize', (/**
* @return {?}
*/
function () { return _this.positionPopover(); }))
];
}));
/** @type {?} */
var options_1 = new PopoverComponentOptions();
options_1.placement = this.placement;
Object.assign(options_1, this._defaultOptions, {
hidePopover: (/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.hidePopover();
}),
onAfterViewInit: (/**
* @return {?}
*/
function () {
_this.positionPopover();
/** @type {?} */
var children = document.getElementsByClassName('am-popover-inner-wrapper')[0].children;
if (children.length > 0) {
var _loop_1 = function (i) {
children[i].id = "" + i;
children[i].addEventListener('click', (/**
* @return {?}
*/
function () {
if (_this.onSelect) {
_this.onSelect.emit(children[i]);
if (options_1.autoClose) {
_this.hidePopover();
}
}
}), false);
};
// 首先我们检查它是否包含子节点
for (var i = 0; i < children.length; i++) {
_loop_1(i);
}
}
})
});
/** @type {?} */
var optionalParams = [
'mask',
'showArrow',
'placement',
'appendToBody',
'overlay',
'className',
'autoClose'
];
optionalParams.forEach((/**
* @param {?} param
* @return {?}
*/
function (param) {
if (typeof _this[param] !== 'undefined') {
((/** @type {?} */ (options_1)))[param] = _this[param];
}
}));
/** @type {?} */
var componentFactory = this._cfr.resolveComponentFactory(PopoverComponent);
/** @type {?} */
var childInjector = Injector.create([
{
provide: PopoverComponentOptions,
useValue: options_1
}
], this._viewContainerRef.parentInjector);
this.popover = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options_1.appendToBody) {
document.body.appendChild(this.popover.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
};
/**
* @private
* @return {?}
*/
PopoverDirective.prototype.positionPopover = /**
* @private
* @return {?}
*/
function () {
if (this.popover) {
/** @type {?} */
var popoverElement = this.popover.location.nativeElement.children[1];
/** @type {?} */
var 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");
}
}
};
/**
* @private
* @return {?}
*/
PopoverDirective.prototype.hidePopover = /**
* @private
* @return {?}
*/
function () {
if (this.popover) {
this.popover.destroy();
delete this.popover;
this.onVisibleChange.emit(false);
this._eventListeners.forEach((/**
* @param {?} fn
* @return {?}
*/
function (fn) { return fn(); }));
this._eventListeners = [];
}
};
PopoverDirective.decorators = [
{ type: Directive, args: [{
selector: '[Popover], [nzm-popover]',
providers: [PopoverOptions]
},] }
];
/** @nocollapse */
PopoverDirective.ctorParameters = function () { return [
{ 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 }],
className: [{ type: Input }],
autoClose: [{ type: Input }],
togglePopover: [{ type: HostListener, args: ['click',] }]
};
return PopoverDirective;
}());
export { PopoverDirective };
if (false) {
/** @type {?} */
PopoverDirective.prototype.popover;
/**
* @type {?}
* @private
*/
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.className;
/** @type {?} */
PopoverDirective.prototype.autoClose;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype._viewContainerRef;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype._elm;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype._defaultOptions;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype._cfr;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype._renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInBvcG92ZXIvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUNaLGdCQUFnQixFQUdoQixVQUFVLEVBRVYsUUFBUSxFQUNSLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsV0FBVyxFQUlaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBRXJEO0lBdUNFLDBCQUNVLGlCQUFtQyxFQUNuQyxJQUFnQixFQUNoQixlQUErQixFQUMvQixJQUE4QixFQUM5QixTQUFvQjtRQUpwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQTBCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFyQ3RCLG9CQUFlLEdBQXNCLEVBQUUsQ0FBQztRQWFoRCxvQkFBZSxHQUEwQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRSxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUF1QjlDLENBQUM7Ozs7SUFkSix3Q0FBYTs7O0lBRGI7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FD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QyxlQUFlLENBQUMsU0FBUyxFQUNsRSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUN2RDtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUssZUFBZSxDQUFDLEdBQUcsT0FBSSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUssTUFBTSxDQUFDLFVBQVUsT0FBSSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUssTUFBTSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsTUFBTSxPQUFJLENBQUMsQ0FBQzthQUMzRztpQkFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFLLENBQUMsT0FBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUssTUFBTSxDQUFDLFVBQVUsT0FBSSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUssTUFBTSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsTUFBTSxPQUFJLENBQUMsQ0FBQzthQUMzRztpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFLLGVBQWUsQ0FBQyxHQUFHLE9BQUksQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFLLGVBQWUsQ0FBQyxJQUFJLE9BQUksQ0FBQyxDQUFDO2FBQzlFO1NBQ0Y7SUFDSCxDQUFDOzs7OztJQUVPLHNDQUFXOzs7O0lBQW5CO1FBQ0UsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTzs7OztZQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsRUFBRSxFQUFFLEVBQUosQ0FBSSxFQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDOztnQkFwTkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztpQkFDNUI7Ozs7Z0JBckJDLGdCQUFnQjtnQkFHaEIsVUFBVTtnQkFXSCxjQUFjO2dCQVJyQix3QkFBd0I7Z0JBQ3hCLFNBQVM7Ozt1QkFvQlIsS0FBSzs0QkFFTCxLQUFLOzBCQUVMLEtBQUs7NEJBRUwsS0FBSzswQkFFTCxLQUFLO2tDQUVMLE1BQU07MkJBRU4sTUFBTTsrQkFFTixLQUFLOzRCQUVMLEtBQUs7NEJBRUwsS0FBSztnQ0FHTCxZQUFZLFNBQUMsT0FBTzs7SUF1THZCLHVCQUFDO0NBQUEsQUFyTkQsSUFxTkM7U0FqTlksZ0JBQWdCOzs7SUFDM0IsbUNBQXdDOzs7OztJQUV4QywyQ0FBZ0Q7O0lBRWhELGdDQUNjOztJQUNkLHFDQUNtQjs7SUFDbkIsbUNBQ2lCOztJQUNqQixxQ0FDa0I7O0lBQ2xCLG1DQUMwQjs7SUFDMUIsMkNBQ2dFOztJQUNoRSxvQ0FDaUQ7O0lBQ2pELHdDQUNzQjs7SUFDdEIscUNBQ2tCOztJQUNsQixxQ0FDbUI7Ozs7O0lBWWpCLDZDQUEyQzs7Ozs7SUFDM0MsZ0NBQXdCOzs7OztJQUN4QiwyQ0FBdUM7Ozs7O0lBQ3ZDLGdDQUFzQzs7Ozs7SUFDdEMscUNBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIEVsZW1lbnRSZWYsXG4gIE9uSW5pdCxcbiAgSW5qZWN0b3IsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuL3BvcG92ZXItb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gJy4vcG9wb3Zlci1jb21wb25lbnQtb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgKiBhcyBQb3NpdGlvbmluZyBmcm9tICcuLi9jb3JlL3V0aWwvcG9zaXRpb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbUG9wb3Zlcl0sIFtuem0tcG9wb3Zlcl0nLFxuICBwcm92aWRlcnM6IFtQb3BvdmVyT3B0aW9uc11cbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwb3BvdmVyOiBDb21wb25lbnRSZWY8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgQElucHV0KClcbiAgbWFzazogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgc2hvd0Fycm93OiBib29sZWFuO1xuICBASW5wdXQoKVxuICB2aXNpYmxlOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgb3ZlcmxheTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpXG4gIG9uVmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgQE91dHB1dCgpXG4gIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KClcbiAgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBjbGFzc05hbWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgYXV0b0Nsb3NlOiBib29sZWFuO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgdG9nZ2xlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9wb3Zlcikge1xuICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9lbG06IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IFBvcG92ZXJPcHRpb25zLFxuICAgIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIHBvc2l0aW9uTWFwKHBsYWNlbWVudCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ3RvcExlZnQnOlxuICAgICAgICByZXR1cm4gJ3RvcC1sZWZ0JztcbiAgICAgIGNhc2UgJ3RvcFJpZ2h0JzpcbiAgICAgICAgcmV0dXJuICd0b3AtcmlnaHQnO1xuICAgICAgY2FzZSAnYm90dG9tTGVmdCc6XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgICAgY2FzZSAnYm90dG9tUmlnaHQnOlxuICAgICAgICByZXR1cm4gJ2JvdHRvbS1yaWdodCc7XG4gICAgICBjYXNlICdsZWZ0VG9wJzpcbiAgICAgICAgcmV0dXJuICdsZWZ0LXRvcCc7XG4gICAgICBjYXNlICdsZWZ0Qm90dG9tJzpcbiAgICAgICAgcmV0dXJuICdsZWZ0LWJvdHRvbSc7XG4gICAgICBjYXNlICdyaWdodFRvcCc6XG4gICAgICAgIHJldHVybiAncmlnaHQtdG9wJztcbiAgICAgIGNhc2UgJ3JpZ2h0Qm90dG9tJzpcbiAgICAgICAgcmV0dXJuICdyaWdodC1ib3R0b20nO1xuICAgICAgY2FzZSAnZnVsbFNjcmVlbic6XG4gICAgICBjYXNlICdsYW5kU2NhcGUnOlxuICAgICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMudmlzaWJsZSAmJiBjaGFuZ2VzLnZpc2libGUuY3VycmVudFZhbHVlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBvcG92ZXIgJiZcbiAgICAgICF0aGlzLl9lbG0ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5wb3BvdmVyLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1BvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycyA9IFtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4gdGhpcy5vbkRvY3VtZW50Q2xpY2soZXZlbnQpKSxcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3RvdWNoZW5kJywgKGV2ZW50OiBFdmVudCkgPT4gdGhpcy5vbkRvY3VtZW50Q2xpY2soZXZlbnQpKSxcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB0aGlzLnBvc2l0aW9uUG9wb3ZlcigpKVxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgUG9wb3ZlckNvbXBvbmVudE9wdGlvbnMoKTtcbiAgICAgIG9wdGlvbnMucGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnQ7XG4gICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHRoaXMuX2RlZmF1bHRPcHRpb25zLCB7XG4gICAgICAgIGhpZGVQb3BvdmVyOiAoZXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJWaWV3SW5pdDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMucG9zaXRpb25Qb3BvdmVyKCk7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbS1wb3BvdmVyLWlubmVyLXdyYXBwZXInKVswXS5jaGlsZHJlbjtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8g6aaW5YWI5oiR5Lus5qOA5p+l5a6D5piv5ZCm5YyF5ZCr5a2Q6IqC54K5XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmlkID0gYCR7aX1gO1xuICAgICAgICAgICAgICBjaGlsZHJlbltpXS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zOiBBcnJheTxrZXlvZiBQb3BvdmVyRGlyZWN0aXZlPiA9IFtcbiAgICAgICAgJ21hc2snLFxuICAgICAgICAnc2hvd0Fycm93JyxcbiAgICAgICAgJ3BsYWNlbWVudCcsXG4gICAgICAgICdhcHBlbmRUb0JvZHknLFxuICAgICAgICAnb3ZlcmxheScsXG4gICAgICAgICdjbGFzc05hbWUnLFxuICAgICAgICAnYXV0b0Nsb3NlJ1xuICAgICAgXTtcbiAgICAgIG9wdGlvbmFsUGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbcGFyYW1dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIChvcHRpb25zIGFzIGFueSlbcGFyYW1dID0gdGhpc1twYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PFBvcG92ZXJDb21wb25lbnQ+ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBvcG92ZXJDb21wb25lbnQpO1xuICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFBvcG92ZXJDb21wb25lbnRPcHRpb25zLFxuICAgICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYucGFyZW50SW5qZWN0b3JcbiAgICAgICk7XG4gICAgICB0aGlzLnBvcG92ZXIgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsXG4gICAgICAgIGNoaWxkSW5qZWN0b3JcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcG92ZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Qb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvcG92ZXIpIHtcbiAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5wb3BvdmVyLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMV07XG4gICAgICBjb25zdCBwb3BvdmVyUG9zaXRpb24gPSBQb3NpdGlvbmluZy5nZXRQb3NpdGlvbkVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9lbG0ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQsXG4gICAgICAgIHRoaXMucG9zaXRpb25NYXAodGhpcy5wbGFjZW1lbnQpIHx8IHRoaXMuX2RlZmF1bHRPcHRpb25zLnBsYWNlbWVudCxcbiAgICAgICAgdGhpcy5hcHBlbmRUb0JvZHkgfHwgdGhpcy5fZGVmYXVsdE9wdGlvbnMuYXBwZW5kVG9Cb2R5XG4gICAgICApO1xuICAgICAgaWYgKHRoaXMucGxhY2VtZW50ID09PSAnbGFuZFNjYXBlJykge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3RvcCcsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdsZWZ0JywgYDBweGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3dpZHRoJywgYCR7d2luZG93LmlubmVyV2lkdGh9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdtYXgtaGVpZ2h0JywgYCR7d2luZG93LmlubmVySGVpZ2h0IC0gcG9wb3ZlclBvc2l0aW9uLmhlaWdodH1weGApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBsYWNlbWVudCA9PT0gJ2Z1bGxTY3JlZW4nKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAndG9wJywgYCR7MH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ2xlZnQnLCBgMHB4YCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHBvcG92ZXJFbGVtZW50LCAnd2lkdGgnLCBgJHt3aW5kb3cuaW5uZXJXaWR0aH1weGApO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ21heC1oZWlnaHQnLCBgJHt3aW5kb3cuaW5uZXJIZWlnaHQgLSBwb3BvdmVyUG9zaXRpb24uaGVpZ2h0fXB4YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShwb3BvdmVyRWxlbWVudCwgJ3RvcCcsIGAke3BvcG92ZXJQb3NpdGlvbi50b3B9cHhgKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUocG9wb3ZlckVsZW1lbnQsICdsZWZ0JywgYCR7cG9wb3ZlclBvc2l0aW9uLmxlZnR9cHhgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZGVQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHRoaXMucG9wb3Zlci5kZXN0cm95KCk7XG4gICAgICBkZWxldGUgdGhpcy5wb3BvdmVyO1xuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==