UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

568 lines 40.6 kB
/** * @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