ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
568 lines • 40.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: components/amap-text/amap-text.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, EventEmitter, ContentChildren, QueryList, ElementRef, NgZone, } from '@angular/core';
import { zip } from 'rxjs';
import { AmapTextService } from './amap-text.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { AMapOverlay, OverlayOptions } from '../../base/amap-overlay';
import { EventBinderService } from '../../shared/event-binder.service';
import { getOptions, ChangeFilter } from '../../utils';
import { PixelService } from '../../shared/pixel.service';
import { IconService } from '../../shared/icon.service';
import { AmapInfoWindowComponent } from '../amap-info-window/amap-info-window.component';
import { AMapService } from '../../shared/amap.service';
/** @type {?} */
var TAG = 'amap-text';
/** @type {?} */
var ALL_OPTIONS = tslib_1.__spread(OverlayOptions, [
'text',
'position',
'anchor',
'offset',
'topWhenClick',
'raiseOnDrag',
'visible',
'zIndex',
'angle',
'autoRotation',
'animation',
'shadow',
'title',
'style',
]);
var AmapTextComponent = /** @class */ (function (_super) {
tslib_1.__extends(AmapTextComponent, _super);
function AmapTextComponent(os, binder, amaps, el, pixels, icons, logger, ngZone) {
var _this = _super.call(this, os, binder) || this;
_this.os = os;
_this.binder = binder;
_this.amaps = amaps;
_this.el = el;
_this.pixels = pixels;
_this.icons = icons;
_this.logger = logger;
_this.ngZone = ngZone;
/**
* 额外: 是否隐藏
*/
_this.hidden = false;
/**
* 额外: 是否包含在点聚合中
*/
_this.inCluster = false;
/**
* 额外: 点击时是否显示信息窗体
*/
_this.openInfoWindow = true;
// ---- Events ----
_this.naReady = new EventEmitter();
// amap info window:
_this.infoWindowComponent = new QueryList();
_this.inited = false;
/** @type {?} */
var target = _this.os.get();
_this.naMouseOut = _this.binder.bindEvent(target, 'mouseout');
_this.naDragStart = _this.binder.bindEvent(target, 'dragstart');
_this.naDragging = _this.binder.bindEvent(target, 'dragging');
_this.naDragEnd = _this.binder.bindEvent(target, 'dragend');
_this.naMoving = _this.binder.bindEvent(target, 'moving');
_this.naMoveEnd = _this.binder.bindEvent(target, 'moveend');
_this.naMoveAlong = _this.binder.bindEvent(target, 'movealong');
return _this;
}
/**
* @return {?}
*/
AmapTextComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.subscription) {
this.subscription.unsubscribe();
}
this.os.destroy();
};
/**
* @param {?} changes
* @return {?}
*/
AmapTextComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
/** @type {?} */
var filter = ChangeFilter.of(changes);
/** @type {?} */
var marker = this.get();
if (!this.inited) {
// do not draw text marker when no poistion defined.
if (!this.position) {
return;
}
this.amaps.get().subscribe((/**
* @return {?}
*/
function () {
_this.logger.d(TAG, 'initializing ...');
// bind info window events:
_this.subscription = _this.binder.bindEvent(marker, 'click').subscribe((/**
* @return {?}
*/
function () {
if (_this.openInfoWindow) {
_this.infoWindowComponent.forEach((/**
* @param {?} w
* @return {?}
*/
function (w) { return w.open(); }));
}
}));
/** @type {?} */
var el = _this.el.nativeElement.querySelector('.amap-text-content');
_this.text = _this.text ? _this.text : el.innerText;
/** @type {?} */
var options = getOptions(_this, ALL_OPTIONS);
if (_this.shadow) {
options.shadow = _this.icons.create(_this.shadow);
}
if (_this.offset) {
options.offset = _this.pixels.create(_this.offset);
}
_this.logger.d(TAG, 'options:', options);
_this.os.create(options).subscribe((/**
* @param {?} m
* @return {?}
*/
function (m) {
_this.ngZone.run((/**
* @return {?}
*/
function () { return _this.naReady.emit(m); }));
_this.logger.d(TAG, 'marker is ready.');
}));
_this.inited = true;
_this.updateInfoWindow();
_this.updateInfoWindowPosition();
}));
}
else {
zip(filter.has('shadow'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setShadow(_this.icons.create(v));
}));
zip(filter.has('offset'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setOffset(_this.pixels.create(v));
}));
zip(filter.has('title'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setTitle(v);
}));
zip(filter.has('content'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setContent(v);
}));
zip(filter.has('extData'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setExtData(v);
}));
zip(filter.has('clickable'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setClickable(!!v);
}));
zip(filter.has('draggable'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setDraggable(!!v);
}));
zip(filter.has('visible'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return (v ? m.show() : m.hide());
}));
zip(filter.has('cursor'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setCursor(v);
}));
zip(filter.has('animation'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setAnimation(v);
}));
zip(filter.has('angle'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setAngle(v);
}));
zip(filter.has('zIndex'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setzIndex(v);
}));
zip(filter.notEmpty('position'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setPosition(v);
}));
zip(filter.notEmpty('style'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setStyle(v);
}));
}
zip(filter.has('isTop'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return m.setTop(!!v);
}));
zip(filter.has('hidden'), marker).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
return (v ? m.hide() : m.show());
}));
};
/**
* @return {?}
*/
AmapTextComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
this.updateInfoWindow();
this.infoWindowComponent.changes.subscribe((/**
* @return {?}
*/
function () { return _this.updateInfoWindow(); }));
};
/**
* @private
* @return {?}
*/
AmapTextComponent.prototype.updateInfoWindow = /**
* @private
* @return {?}
*/
function () {
if (this.infoWindowComponent && this.inited) {
if (this.infoWindowComponent.length > 1) {
this.logger.e(TAG, 'Expected no more than 1 info window.');
return;
}
/** @type {?} */
var marker_1 = this.os.get();
this.infoWindowComponent.forEach((/**
* @param {?} component
* @return {?}
*/
function (component) {
component.hostMarker = marker_1;
}));
}
};
/**
* @private
* @return {?}
*/
AmapTextComponent.prototype.updateInfoWindowPosition = /**
* @private
* @return {?}
*/
function () {
if (this.infoWindowComponent && this.inited) {
this.infoWindowComponent.forEach((/**
* @param {?} component
* @return {?}
*/
function (component) {
component.toggleOpen();
}));
}
};
/**
* 获取已创建的 AMap.Text 对象
*/
/**
* 获取已创建的 AMap.Text 对象
* @return {?}
*/
AmapTextComponent.prototype.get = /**
* 获取已创建的 AMap.Text 对象
* @return {?}
*/
function () {
return this.os.get();
};
AmapTextComponent.decorators = [
{ type: Component, args: [{
selector: 'amap-text',
exportAs: 'text',
template: "<div class='amap-text-inner'></div>\n<div class='amap-text-content'>\n <ng-content></ng-content>\n</div>",
providers: [AmapTextService]
}] }
];
/** @nocollapse */
AmapTextComponent.ctorParameters = function () { return [
{ type: AmapTextService },
{ type: EventBinderService },
{ type: AMapService },
{ type: ElementRef },
{ type: PixelService },
{ type: IconService },
{ type: LoggerService },
{ type: NgZone }
]; };
AmapTextComponent.propDecorators = {
text: [{ type: Input }],
position: [{ type: Input }],
anchor: [{ type: Input }],
offset: [{ type: Input }],
topWhenClick: [{ type: Input }],
raiseOnDrag: [{ type: Input }],
visible: [{ type: Input }],
zIndex: [{ type: Input }],
angle: [{ type: Input }],
autoRotation: [{ type: Input }],
animation: [{ type: Input }],
shadow: [{ type: Input }],
title: [{ type: Input }],
style: [{ type: Input }],
isTop: [{ type: Input }],
hidden: [{ type: Input }],
inCluster: [{ type: Input }],
openInfoWindow: [{ type: Input }],
naReady: [{ type: Output }],
naMouseOut: [{ type: Output }],
naDragStart: [{ type: Output }],
naDragging: [{ type: Output }],
naDragEnd: [{ type: Output }],
naMoving: [{ type: Output }],
naMoveEnd: [{ type: Output }],
naMoveAlong: [{ type: Output }],
infoWindowComponent: [{ type: ContentChildren, args: [AmapInfoWindowComponent,] }]
};
return AmapTextComponent;
}(AMapOverlay));
export { AmapTextComponent };
if (false) {
/**
* 点标记显示内容
* @type {?}
*/
AmapTextComponent.prototype.text;
/**
* 点标记在地图上显示的位置
* @type {?}
*/
AmapTextComponent.prototype.position;
/**
* 标记锚点
* @type {?}
*/
AmapTextComponent.prototype.anchor;
/**
* 点标记显示位置偏移量
* @type {?}
*/
AmapTextComponent.prototype.offset;
/**
* 鼠标点击时marker是否置顶
* @type {?}
*/
AmapTextComponent.prototype.topWhenClick;
/**
* 拖拽点标记时是否开启点标记离开地图的效果
* @type {?}
*/
AmapTextComponent.prototype.raiseOnDrag;
/**
* 点标记是否可见
* @type {?}
*/
AmapTextComponent.prototype.visible;
/**
* 点标记的叠加顺序
* @type {?}
*/
AmapTextComponent.prototype.zIndex;
/**
* 点标记的旋转角度
* @type {?}
*/
AmapTextComponent.prototype.angle;
/**
* 是否自动旋转
* @type {?}
*/
AmapTextComponent.prototype.autoRotation;
/**
* 点标记的动画效果
* @type {?}
*/
AmapTextComponent.prototype.animation;
/**
* 点标记阴影
* @type {?}
*/
AmapTextComponent.prototype.shadow;
/**
* 鼠标滑过点标记时的文字提示
* @type {?}
*/
AmapTextComponent.prototype.title;
/**
* 样式
* @type {?}
*/
AmapTextComponent.prototype.style;
/**
* 额外: 是否置顶
* @type {?}
*/
AmapTextComponent.prototype.isTop;
/**
* 额外: 是否隐藏
* @type {?}
*/
AmapTextComponent.prototype.hidden;
/**
* 额外: 是否包含在点聚合中
* @type {?}
*/
AmapTextComponent.prototype.inCluster;
/**
* 额外: 点击时是否显示信息窗体
* @type {?}
*/
AmapTextComponent.prototype.openInfoWindow;
/** @type {?} */
AmapTextComponent.prototype.naReady;
/** @type {?} */
AmapTextComponent.prototype.naMouseOut;
/** @type {?} */
AmapTextComponent.prototype.naDragStart;
/** @type {?} */
AmapTextComponent.prototype.naDragging;
/** @type {?} */
AmapTextComponent.prototype.naDragEnd;
/** @type {?} */
AmapTextComponent.prototype.naMoving;
/** @type {?} */
AmapTextComponent.prototype.naMoveEnd;
/** @type {?} */
AmapTextComponent.prototype.naMoveAlong;
/** @type {?} */
AmapTextComponent.prototype.infoWindowComponent;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.inited;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.subscription;
/**
* @type {?}
* @protected
*/
AmapTextComponent.prototype.os;
/**
* @type {?}
* @protected
*/
AmapTextComponent.prototype.binder;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.amaps;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.el;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.pixels;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.icons;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.logger;
/**
* @type {?}
* @private
*/
AmapTextComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9hbWFwLXRleHQvYW1hcC10ZXh0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUdaLGVBQWUsRUFDZixTQUFTLEVBRVQsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0lBRWxELEdBQUcsR0FBRyxXQUFXOztJQUNqQixXQUFXLG9CQUNaLGNBQWM7SUFDakIsTUFBTTtJQUNOLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtJQUNSLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULFFBQVE7SUFDUixPQUFPO0lBQ1AsY0FBYztJQUNkLFdBQVc7SUFDWCxRQUFRO0lBQ1IsT0FBTztJ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QXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRWxlbWVudFJlZixcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbWFwVGV4dFNlcnZpY2UgfSBmcm9tICcuL2FtYXAtdGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFNYXBPdmVybGF5LCBPdmVybGF5T3B0aW9ucyB9IGZyb20gJy4uLy4uL2Jhc2UvYW1hcC1vdmVybGF5JztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBJUGl4ZWwsIElJY29uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQaXhlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGl4ZWwuc2VydmljZSc7XG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW1hcEluZm9XaW5kb3dDb21wb25lbnQgfSBmcm9tICcuLi9hbWFwLWluZm8td2luZG93L2FtYXAtaW5mby13aW5kb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEFNYXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FtYXAuc2VydmljZSc7XG5cbmNvbnN0IFRBRyA9ICdhbWFwLXRleHQnO1xuY29uc3QgQUxMX09QVElPTlMgPSBbXG4gIC4uLk92ZXJsYXlPcHRpb25zLFxuICAndGV4dCcsXG4gICdwb3NpdGlvbicsXG4gICdhbmNob3InLFxuICAnb2Zmc2V0JyxcbiAgJ3RvcFdoZW5DbGljaycsXG4gICdyYWlzZU9uRHJhZycsXG4gICd2aXNpYmxlJyxcbiAgJ3pJbmRleCcsXG4gICdhbmdsZScsXG4gICdhdXRvUm90YXRpb24nLFxuICAnYW5pbWF0aW9uJyxcbiAgJ3NoYWRvdycsXG4gICd0aXRsZScsXG4gICdzdHlsZScsXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbWFwLXRleHQnLFxuICBleHBvcnRBczogJ3RleHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYW1hcC10ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbQW1hcFRleHRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQW1hcFRleHRDb21wb25lbnQgZXh0ZW5kcyBBTWFwT3ZlcmxheTxBTWFwLlRleHQ+XG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAvLyAtLS0tIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog54K55qCH6K6w5pi+56S65YaF5a65XG4gICAqL1xuICBASW5wdXQoKSB0ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiDngrnmoIforrDlnKjlnLDlm77kuIrmmL7npLrnmoTkvY3nva5cbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiBBTWFwLkxvY2F0aW9uVmFsdWU7XG4gIC8qKlxuICAgKiDmoIforrDplJrngrlcbiAgICovXG4gIEBJbnB1dCgpIGFuY2hvcjogQU1hcC5NYXJrZXIuQW5jaG9yO1xuICAvKipcbiAgICog54K55qCH6K6w5pi+56S65L2N572u5YGP56e76YePXG4gICAqL1xuICBASW5wdXQoKSBvZmZzZXQ6IEFNYXAuUGl4ZWwgfCBJUGl4ZWw7XG4gIC8qKlxuICAgKiDpvKDmoIfngrnlh7vml7ZtYXJrZXLmmK/lkKbnva7pobZcbiAgICovXG4gIEBJbnB1dCgpIHRvcFdoZW5DbGljazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOaLluaLveeCueagh+iusOaXtuaYr+WQpuW8gOWQr+eCueagh+iusOemu+W8gOWcsOWbvueahOaViOaenFxuICAgKi9cbiAgQElucHV0KCkgcmFpc2VPbkRyYWc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDngrnmoIforrDmmK/lkKblj6/op4FcbiAgICovXG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDngrnmoIforrDnmoTlj6DliqDpobrluo9cbiAgICovXG4gIEBJbnB1dCgpIHpJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICog54K55qCH6K6w55qE5peL6L2s6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBhbmdsZTogbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm6Ieq5Yqo5peL6L2sXG4gICAqL1xuICBASW5wdXQoKSBhdXRvUm90YXRpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiDngrnmoIforrDnmoTliqjnlLvmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGFuaW1hdGlvbjogQU1hcC5BbmltYXRpb25OYW1lO1xuICAvKipcbiAgICog54K55qCH6K6w6Zi05b2xXG4gICAqL1xuICBASW5wdXQoKSBzaGFkb3c6IEFNYXAuSWNvbiB8IHN0cmluZyB8IElJY29uO1xuICAvKipcbiAgICog6byg5qCH5ruR6L+H54K55qCH6K6w5pe255qE5paH5a2X5o+Q56S6XG4gICAqL1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICAvKipcbiAgICog5qC35byPXG4gICAqL1xuICBASW5wdXQoKSBzdHlsZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm572u6aG2XG4gICAqL1xuICBASW5wdXQoKSBpc1RvcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm6ZqQ6JePXG4gICAqL1xuICBASW5wdXQoKSBoaWRkZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm5YyF5ZCr5Zyo54K56IGa5ZCI5LitXG4gICAqL1xuICBASW5wdXQoKSBpbkNsdXN0ZXIgPSBmYWxzZTtcbiAgLyoqXG4gICAqIOmineWkljog54K55Ye75pe25piv5ZCm5pi+56S65L+h5oGv56qX5L2TXG4gICAqL1xuICBASW5wdXQoKSBvcGVuSW5mb1dpbmRvdyA9IHRydWU7XG5cbiAgLy8gLS0tLSBFdmVudHMgLS0tLVxuICBAT3V0cHV0KCkgbmFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG5hTW91c2VPdXQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFEcmFnU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFEcmFnZ2luZzogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdFbmQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3Zpbmc6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3ZlRW5kOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUFsb25nOiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAvLyBhbWFwIGluZm8gd2luZG93OlxuICBAQ29udGVudENoaWxkcmVuKEFtYXBJbmZvV2luZG93Q29tcG9uZW50KVxuICBpbmZvV2luZG93Q29tcG9uZW50ID0gbmV3IFF1ZXJ5TGlzdDxBbWFwSW5mb1dpbmRvd0NvbXBvbmVudD4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvczogQW1hcFRleHRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBiaW5kZXI6IEV2ZW50QmluZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGFtYXBzOiBBTWFwU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcGl4ZWxzOiBQaXhlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uczogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIob3MsIGJpbmRlcik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcy5nZXQoKTtcbiAgICB0aGlzLm5hTW91c2VPdXQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGFyZ2V0LCAnbW91c2VvdXQnKTtcbiAgICB0aGlzLm5hRHJhZ1N0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudCh0YXJnZXQsICdkcmFnZ2luZycpO1xuICAgIHRoaXMubmFEcmFnRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdlbmQnKTtcbiAgICB0aGlzLm5hTW92aW5nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmluZycpO1xuICAgIHRoaXMubmFNb3ZlRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVlbmQnKTtcbiAgICB0aGlzLm5hTW92ZUFsb25nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVhbG9uZycpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9zLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoIXRoaXMuaW5pdGVkKSB7XG4gICAgICAvLyBkbyBub3QgZHJhdyB0ZXh0IG1hcmtlciB3aGVuIG5vIHBvaXN0aW9uIGRlZmluZWQuXG4gICAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbWFwcy5nZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2luaXRpYWxpemluZyAuLi4nKTtcbiAgICAgICAgLy8gYmluZCBpbmZvIHdpbmRvdyBldmVudHM6XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG1hcmtlciwgJ2NsaWNrJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5vcGVuSW5mb1dpbmRvdykge1xuICAgICAgICAgICAgdGhpcy5pbmZvV2luZG93Q29tcG9uZW50LmZvckVhY2godyA9PiB3Lm9wZW4oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hbWFwLXRleHQtY29udGVudCcpO1xuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQgPyB0aGlzLnRleHQgOiBlbC5pbm5lclRleHQ7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zPEFNYXAuVGV4dC5PcHRpb25zPih0aGlzLCBBTExfT1BUSU9OUyk7XG4gICAgICAgIGlmICh0aGlzLnNoYWRvdykge1xuICAgICAgICAgIG9wdGlvbnMuc2hhZG93ID0gdGhpcy5pY29ucy5jcmVhdGUodGhpcy5zaGFkb3cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCkge1xuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gdGhpcy5waXhlbHMuY3JlYXRlKHRoaXMub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMub3MuY3JlYXRlKG9wdGlvbnMpLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5uYVJlYWR5LmVtaXQobSkpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbWFya2VyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUluZm9XaW5kb3coKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbmZvV2luZG93UG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmcgfCBBTWFwLkljb24+KCdzaGFkb3cnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRTaGFkb3codGhpcy5pY29ucy5jcmVhdGUodikpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPEFNYXAuUGl4ZWwgfCBJUGl4ZWw+KCdvZmZzZXQnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRPZmZzZXQodGhpcy5waXhlbHMuY3JlYXRlKHYpKSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmc+KCd0aXRsZScpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldFRpdGxlKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGFueT4oJ2NvbnRlbnQnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDb250ZW50KHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGFueT4oJ2V4dERhdGEnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRFeHREYXRhKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGJvb2xlYW4+KCdjbGlja2FibGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDbGlja2FibGUoISF2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignZHJhZ2dhYmxlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0RHJhZ2dhYmxlKCEhdikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ3Zpc2libGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gKHYgPyBtLnNob3coKSA6IG0uaGlkZSgpKSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmc+KCdjdXJzb3InKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDdXJzb3IodikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8QU1hcC5BbmltYXRpb25OYW1lPignYW5pbWF0aW9uJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0QW5pbWF0aW9uKHYpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPG51bWJlcj4oJ2FuZ2xlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0QW5nbGUodikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignekluZGV4JyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0ekluZGV4KHYpKTtcbiAgICAgIHppcChmaWx0ZXIubm90RW1wdHk8QU1hcC5Mb2NhdGlvblZhbHVlPigncG9zaXRpb24nKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRQb3NpdGlvbih2KSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLm5vdEVtcHR5PGFueT4oJ3N0eWxlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0U3R5bGUodikpO1xuICAgIH1cbiAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignaXNUb3AnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRUb3AoISF2KSk7XG4gICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2hpZGRlbicpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiAodiA/IG0uaGlkZSgpIDogbS5zaG93KCkpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUluZm9XaW5kb3coKTtcbiAgICB0aGlzLmluZm9XaW5kb3dDb21wb25lbnQuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVJbmZvV2luZG93KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmZvV2luZG93KCkge1xuICAgIGlmICh0aGlzLmluZm9XaW5kb3dDb21wb25lbnQgJiYgdGhpcy5pbml0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmluZm9XaW5kb3dDb21wb25lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lKFRBRywgJ0V4cGVjdGVkIG5vIG1vcmUgdGhhbiAxIGluZm8gd2luZG93LicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcmtlciA9IHRoaXMub3MuZ2V0KCk7XG4gICAgICB0aGlzLmluZm9XaW5kb3dDb21wb25lbnQuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgICBjb21wb25lbnQuaG9zdE1hcmtlciA9IG1hcmtlcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5mb1dpbmRvd1Bvc2l0aW9uKCkge1xuICAgIGlmICh0aGlzLmluZm9XaW5kb3dDb21wb25lbnQgJiYgdGhpcy5pbml0ZWQpIHtcbiAgICAgIHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbXBvbmVudC50b2dnbGVPcGVuKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuVGV4dCDlr7nosaFcbiAgICovXG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcy5nZXQoKTtcbiAgfVxufVxuIl19