UNPKG

@bixi/label

Version:
388 lines 33.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { Subscription } from 'rxjs'; import { delayWhen, filter } from 'rxjs/operators'; import { EVENTS } from './label.event'; import { LabelHub } from './label.hub'; import { functionProxy } from './label.util'; export class BixiLabelCoreComponent { /** * @param {?} sanitizer * @param {?} cdr */ constructor(sanitizer, cdr) { this.sanitizer = sanitizer; this.cdr = cdr; this.subscription = new Subscription(); this.hoverInLabelsEvent = null; this.labelingEvent = null; this.labelTooltipDisabled = false; this.labelModalDisabled = false; this.startLabeling = new EventEmitter(); this.deleteLabels = new EventEmitter(); this.clickLabels = new EventEmitter(); this.pdfLoadFailed = new EventEmitter(); this.pdfScrolling = new EventEmitter(); this.mergeTables = new EventEmitter(); this.splitTable = new EventEmitter(); this.tblOperationRecords = new EventEmitter(); this.messageHandler = (/** * @param {?} e * @return {?} */ (e) => { const { id, event, data } = e.data; if (this.hub.id !== id) return; if (this.hub.logAllEvents) { if (!this.hub.logIgnoreEvents.includes(event)) { console.log(`[@bixi/label] Event(${this.hub.id})`, e.data); } } switch (event) { case EVENTS.ready: { // 初始化标注器 this.hub.setReady(true); this.hub.innerSetPagination({ pageCount: data.pageCount }); break; } case EVENTS.zoomChange: { this.hub.setZoom(data.zoom); break; } case EVENTS.startLabeling: { this.hub.startLabeling(data); this.startLabeling.emit(data); break; } case EVENTS.deleteLabels: { this.hub.deleteLabels(data); this.deleteLabels.emit(data); break; } case EVENTS.paginationChange: { this.hub.innerSetPagination({ pageNumber: data.pageNumber }); break; } case EVENTS.searchResult: { this.hub.setSearchResult(data); break; } case EVENTS.clickLabels: { this.clickLabels.emit(data); break; } case EVENTS.hoverInLabel: { this.hub.hoverInLabels(data); break; } case EVENTS.hoverOutLabel: { this.hub.hoverInLabels(null); break; } case EVENTS.pdfScrolling: { if (this.hub.hoverInLabelsEvent) { this.hub.hoverInLabels(null); } this.pdfScrolling.emit(true); break; } case EVENTS.pdfLoadFailed: { this.pdfLoadFailed.emit(); break; } case EVENTS.log: { this.hub.setLog(data); break; } case EVENTS.resize: { this.hub.resize$.next(); break; } case EVENTS.mergeTables: { this.mergeTables.emit(data); break; } case EVENTS.splitTable: { this.splitTable.emit(data); break; } case EVENTS.tblOperationRecords: { this.tblOperationRecords.emit(data); break; } default: { if (this.hub.logUnhandledEvents) { if (!this.hub.logIgnoreEvents.includes(event)) { console.warn(`[@bixi/label] Unhandled Event(${this.hub.id}) `, event, data); } } break; } } }); } /** * @param {?} val * @return {?} */ set engine(val) { this.url = this.sanitizer.bypassSecurityTrustResourceUrl(`${val || './bixi-label/index.html'}`); this._engine = val; } /** * @return {?} */ get engine() { return this._engine; } /** * @return {?} */ onLoad() { if (!this.hub) return; /** @type {?} */ const api = this.api; this.hub.setApi(api); this.hub.setLoaded(!!api); } /** * @return {?} */ get api() { if (!this.iframe) return; /** @type {?} */ const service = this.iframe.element.nativeElement.contentWindow.ProxyApiService2; if (this.hub.dev) { return functionProxy(service); } return service; } /** * @return {?} */ ngOnInit() { this.subscription.add(this.hub.init$ .pipe(filter((/** * @param {?} i * @return {?} */ i => !!i)), delayWhen((/** * @return {?} */ () => this.hub.loaded$.pipe(filter((/** * @param {?} r * @return {?} */ r => r === true)))))) .subscribe((/** * @param {?} options * @return {?} */ options => { if (!this.api) return; this.api.init(options); }))); this.subscription.add(this.hub.labels$ .pipe(filter((/** * @param {?} i * @return {?} */ i => !!i)), delayWhen((/** * @return {?} */ () => this.hub.ready$.pipe(filter((/** * @param {?} r * @return {?} */ r => r === true)))))) .subscribe((/** * @param {?} labels * @return {?} */ (labels) => { if (!this.api) return; this.api.setLabels(labels); }))); this.subscription.add(this.hub.tables$ .pipe(filter((/** * @param {?} i * @return {?} */ i => !!i)), delayWhen((/** * @return {?} */ () => this.hub.ready$.pipe(filter((/** * @param {?} r * @return {?} */ r => r === true)))))) .subscribe((/** * @param {?} tables * @return {?} */ (tables) => { if (!this.api) return; this.api.setTables(tables); }))); this.subscription.add(this.hub.hoverInLabelsEvent$ .subscribe((/** * @param {?} event * @return {?} */ event => { this.hoverInLabelsEvent = event; this.cdr.detectChanges(); }))); this.subscription.add(this.hub.labelingEvent$ .subscribe((/** * @param {?} event * @return {?} */ event => { this.labelingEvent = event; this.cdr.detectChanges(); }))); window.addEventListener('message', this.messageHandler); } /** * @return {?} */ onCloseLabelModal() { this.hub.stopLabeling(); this.hub.restore(); } /** * @return {?} */ ngOnDestroy() { this.subscription.unsubscribe(); this.hub.destory(); window.removeEventListener('message', this.messageHandler); } } BixiLabelCoreComponent.decorators = [ { type: Component, args: [{ selector: 'bixi-label-core', template: ` <div class="bixi-label-core"> <iframe #iframe [src]="url" (load)="onLoad()" [attr.id]="hub.id" [title]="hub.id"> </iframe> <bixi-label-tooltip *ngIf="hoverInLabelsEvent && !labelTooltipDisabled" [tooltip]="hoverInLabelsEvent" [content]="labelTooltipContent"> </bixi-label-tooltip> <bixi-label-modal *ngIf="labelModalContent && labelingEvent && !labelModalDisabled" [dragBoundary]="dragBoundary" (close)="onCloseLabelModal()" [labeling]="labelingEvent" [title]="labelModalTitle" [content]="labelModalContent"> </bixi-label-modal> </div> `, exportAs: 'bixiLabelText', encapsulation: ViewEncapsulation.None, preserveWhitespaces: true, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".bixi-label-core{position:relative;width:100%;height:100%}.bixi-label-core iframe{width:100%;height:100%;vertical-align:top;border:none}.bixi-label-modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000;background-color:rgba(0,0,0,.5);-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity .4s cubic-bezier(.25,.8,.25,1);pointer-events:auto}.bixi-label-modal-backdrop.cdk-overlay-backdrop-showing{opacity:1}.bixi-label-modal,.bixi-label-tooltip{position:absolute;top:0;left:0}.bixi-label-tooltip{pointer-events:none}.bixi-label-modal{display:flex;flex-direction:column;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.bixi-label-modal-header{height:32px;font-size:12px;border-bottom:1px solid #d9d9d9;cursor:move}.bixi-label-modal-header-inner{display:flex;justify-content:space-between;height:100%;line-height:32px}.bixi-label-modal-content{height:calc(100% - 32px);overflow:auto}.bixi-label-modal .bixi-label-modal-title{padding-left:8px;font-weight:500}.bixi-label-modal .bixi-label-modal-close-icon{width:36px;height:100%;text-align:center;cursor:pointer;-webkit-user-drag:none}"] }] } ]; /** @nocollapse */ BixiLabelCoreComponent.ctorParameters = () => [ { type: DomSanitizer }, { type: ChangeDetectorRef } ]; BixiLabelCoreComponent.propDecorators = { dragBoundary: [{ type: Input }], iframe: [{ type: ViewChild, args: ['iframe', { read: ViewContainerRef },] }], hub: [{ type: Input }], engine: [{ type: Input }], labelTooltipContent: [{ type: Input }], labelTooltipDisabled: [{ type: Input }], labelModalTitle: [{ type: Input }], labelModalDisabled: [{ type: Input }], labelModalContent: [{ type: Input }], startLabeling: [{ type: Output }], deleteLabels: [{ type: Output }], clickLabels: [{ type: Output }], pdfLoadFailed: [{ type: Output }], pdfScrolling: [{ type: Output }], mergeTables: [{ type: Output }], splitTable: [{ type: Output }], tblOperationRecords: [{ type: Output }] }; if (false) { /** @type {?} */ BixiLabelCoreComponent.prototype.subscription; /** @type {?} */ BixiLabelCoreComponent.prototype._engine; /** @type {?} */ BixiLabelCoreComponent.prototype.url; /** @type {?} */ BixiLabelCoreComponent.prototype.hoverInLabelsEvent; /** @type {?} */ BixiLabelCoreComponent.prototype.labelingEvent; /** @type {?} */ BixiLabelCoreComponent.prototype.dragBoundary; /** @type {?} */ BixiLabelCoreComponent.prototype.iframe; /** @type {?} */ BixiLabelCoreComponent.prototype.hub; /** @type {?} */ BixiLabelCoreComponent.prototype.labelTooltipContent; /** @type {?} */ BixiLabelCoreComponent.prototype.labelTooltipDisabled; /** @type {?} */ BixiLabelCoreComponent.prototype.labelModalTitle; /** @type {?} */ BixiLabelCoreComponent.prototype.labelModalDisabled; /** @type {?} */ BixiLabelCoreComponent.prototype.labelModalContent; /** @type {?} */ BixiLabelCoreComponent.prototype.startLabeling; /** @type {?} */ BixiLabelCoreComponent.prototype.deleteLabels; /** @type {?} */ BixiLabelCoreComponent.prototype.clickLabels; /** @type {?} */ BixiLabelCoreComponent.prototype.pdfLoadFailed; /** @type {?} */ BixiLabelCoreComponent.prototype.pdfScrolling; /** @type {?} */ BixiLabelCoreComponent.prototype.mergeTables; /** @type {?} */ BixiLabelCoreComponent.prototype.splitTable; /** @type {?} */ BixiLabelCoreComponent.prototype.tblOperationRecords; /** @type {?} */ BixiLabelCoreComponent.prototype.messageHandler; /** @type {?} */ BixiLabelCoreComponent.prototype.sanitizer; /** * @type {?} * @private */ BixiLabelCoreComponent.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYml4aS9sYWJlbC8iLCJzb3VyY2VzIjpbInNyYy9sYWJlbC1jb3JlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBbUM3QyxNQUFNLE9BQU8sc0JBQXNCOzs7OztJQThCakMsWUFDUyxTQUF1QixFQUN0QixHQUFzQjtRQUR2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0JoQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHbEMsdUJBQWtCLEdBQStCLElBQUksQ0FBQztRQUN0RCxrQkFBYSxHQUEwQixJQUFJLENBQUM7UUFhbkMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUVuQyxrQkFBYSxHQUFpQyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUNqRixpQkFBWSxHQUFxQyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUN4RixnQkFBVyxHQUFvQyxJ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O0lBQzdDLG1EQUE4RDs7SUFDOUQsK0NBQTJGOztJQUMzRiw4Q0FBa0c7O0lBQ2xHLDZDQUErRjs7SUFDL0YsK0NBQTZDOztJQUM3Qyw4Q0FBNEM7O0lBQzVDLDZDQUF5RTs7SUFDekUsNENBQXdFOztJQUN4RSxxREFBMEY7O0lBb0UxRixnREE2RkM7O0lBL0pDLDJDQUE4Qjs7Ozs7SUFDOUIscUNBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXlXaGVuLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFVkVOVFMgfSBmcm9tICcuL2xhYmVsLmV2ZW50JztcbmltcG9ydCB7IExhYmVsSHViIH0gZnJvbSAnLi9sYWJlbC5odWInO1xuaW1wb3J0IHsgSUNsaWNrTGFiZWxzRXZlbnQsIElEZWxldGVMYWJlbHNFdmVudCwgSUhvdmVySW5MYWJlbHNFdmVudCwgSUxhYmVsaW5nRXZlbnQsIElTYWZlQW55LCBJVGFibGVNYXRyaXgsIElUYWJsZU9wZXJhdGlvblJlY29yZCB9IGZyb20gJy4vbGFiZWwudHlwZSc7XG5pbXBvcnQgeyBmdW5jdGlvblByb3h5IH0gZnJvbSAnLi9sYWJlbC51dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYml4aS1sYWJlbC1jb3JlJyxcbiAgdGVtcGxhdGU6IGBcbiAgPGRpdiBjbGFzcz1cImJpeGktbGFiZWwtY29yZVwiPlxuICAgIDxpZnJhbWVcbiAgICAgICNpZnJhbWVcbiAgICAgIFtzcmNdPVwidXJsXCJcbiAgICAgIChsb2FkKT1cIm9uTG9hZCgpXCJcbiAgICAgIFthdHRyLmlkXT1cImh1Yi5pZFwiXG4gICAgICBbdGl0bGVdPVwiaHViLmlkXCI+XG4gICAgPC9pZnJhbWU+XG4gICAgPGJpeGktbGFiZWwtdG9vbHRpcFxuICAgICAgKm5nSWY9XCJob3ZlckluTGFiZWxzRXZlbnQgJiYgIWxhYmVsVG9vbHRpcERpc2FibGVkXCJcbiAgICAgIFt0b29sdGlwXT1cImhvdmVySW5MYWJlbHNFdmVudFwiXG4gICAgICBbY29udGVudF09XCJsYWJlbFRvb2x0aXBDb250ZW50XCI+XG4gICAgPC9iaXhpLWxhYmVsLXRvb2x0aXA+XG4gICAgPGJpeGktbGFiZWwtbW9kYWxcbiAgICAgICpuZ0lmPVwibGFiZWxNb2RhbENvbnRlbnQgJiYgbGFiZWxpbmdFdmVudCAmJiAhbGFiZWxNb2RhbERpc2FibGVkXCJcbiAgICAgIFtkcmFnQm91bmRhcnldPVwiZHJhZ0JvdW5kYXJ5XCJcbiAgICAgIChjbG9zZSk9XCJvbkNsb3NlTGFiZWxNb2RhbCgpXCJcbiAgICAgIFtsYWJlbGluZ109XCJsYWJlbGluZ0V2ZW50XCJcbiAgICAgIFt0aXRsZV09XCJsYWJlbE1vZGFsVGl0bGVcIlxuICAgICAgW2NvbnRlbnRdPVwibGFiZWxNb2RhbENvbnRlbnRcIj5cbiAgICA8L2JpeGktbGFiZWwtbW9kYWw+XG4gICA8L2Rpdj5cbiAgYCxcbiAgZXhwb3J0QXM6ICdiaXhpTGFiZWxUZXh0JyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIC8vIFRPRE8g5YGa5Li76aKY5YiH5o2iXG4gIHN0eWxlVXJsczogWycuL3N0eWxlL2luZGV4Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCaXhpTGFiZWxDb3JlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIF9lbmdpbmU6IHN0cmluZztcbiAgdXJsOiBTYWZlUmVzb3VyY2VVcmw7XG4gIGhvdmVySW5MYWJlbHNFdmVudDogSUhvdmVySW5MYWJlbHNFdmVudCB8IG51bGwgPSBudWxsO1xuICBsYWJlbGluZ0V2ZW50OiBJTGFiZWxpbmdFdmVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkcmFnQm91bmRhcnk6IHN0cmluZztcbiAgQFZpZXdDaGlsZCgnaWZyYW1lJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGlmcmFtZTogVmlld0NvbnRhaW5lclJlZjtcbiAgQElucHV0KCkgaHViOiBMYWJlbEh1YjtcbiAgQElucHV0KClcbiAgc2V0IGVuZ2luZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGAke3ZhbCB8fCAnLi9iaXhpLWxhYmVsL2luZGV4Lmh0bWwnfWApO1xuICAgIHRoaXMuX2VuZ2luZSA9IHZhbDtcbiAgfVxuICBnZXQgZW5naW5lKCkge1xuICAgIHJldHVybiB0aGlzLl9lbmdpbmU7XG4gIH1cbiAgQElucHV0KCkgbGFiZWxUb29sdGlwQ29udGVudDogVGVtcGxhdGVSZWY8SVNhZmVBbnk+IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBsYWJlbFRvb2x0aXBEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbE1vZGFsVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWxNb2RhbERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhYmVsTW9kYWxDb250ZW50OiBUZW1wbGF0ZVJlZjxJU2FmZUFueT4gfCB1bmRlZmluZWQ7XG4gIEBPdXRwdXQoKSBzdGFydExhYmVsaW5nOiBFdmVudEVtaXR0ZXI8SUxhYmVsaW5nRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJTGFiZWxpbmdFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZUxhYmVsczogRXZlbnRFbWl0dGVyPElEZWxldGVMYWJlbHNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElEZWxldGVMYWJlbHNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNsaWNrTGFiZWxzOiBFdmVudEVtaXR0ZXI8SUNsaWNrTGFiZWxzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2xpY2tMYWJlbHNFdmVudD4oKTtcbiAgQE91dHB1dCgpIHBkZkxvYWRGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwZGZTY3JvbGxpbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBtZXJnZVRhYmxlczogRXZlbnRFbWl0dGVyPElUYWJsZU1hdHJpeFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNwbGl0VGFibGU6IEV2ZW50RW1pdHRlcjxJVGFibGVNYXRyaXhbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0YmxPcGVyYXRpb25SZWNvcmRzOiBFdmVudEVtaXR0ZXI8SVRhYmxlT3BlcmF0aW9uUmVjb3JkW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkgeyB9XG5cbiAgb25Mb2FkKCkge1xuICAgIGlmICghdGhpcy5odWIpIHJldHVybjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmFwaTtcbiAgICB0aGlzLmh1Yi5zZXRBcGkoYXBpKTtcbiAgICB0aGlzLmh1Yi5zZXRMb2FkZWQoISFhcGkpO1xuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICBpZiAoIXRoaXMuaWZyYW1lKSByZXR1cm47XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuaWZyYW1lLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250ZW50V2luZG93LlByb3h5QXBpU2VydmljZTI7XG4gICAgaWYgKHRoaXMuaHViLmRldikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uUHJveHkoc2VydmljZSk7XG4gICAgfVxuICAgIHJldHVybiBzZXJ2aWNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaHViLmluaXQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGkgPT4gISFpKSxcbiAgICAgICAgZGVsYXlXaGVuKCgpID0+IHRoaXMuaHViLmxvYWRlZCQucGlwZShmaWx0ZXIociA9PiByID09PSB0cnVlKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYXBpKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXBpLmluaXQob3B0aW9ucyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaHViLmxhYmVscyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaSA9PiAhIWkpLFxuICAgICAgICBkZWxheVdoZW4oKCkgPT4gdGhpcy5odWIucmVhZHkkLnBpcGUoZmlsdGVyKHIgPT4gciA9PT0gdHJ1ZSkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGFiZWxzKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hcGkpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcGkuc2V0TGFiZWxzKGxhYmVscyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaHViLnRhYmxlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaSA9PiAhIWkpLFxuICAgICAgICBkZWxheVdoZW4oKCkgPT4gdGhpcy5odWIucmVhZHkkLnBpcGUoZmlsdGVyKHIgPT4gciA9PT0gdHJ1ZSkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodGFibGVzKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hcGkpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcGkuc2V0VGFibGVzKHRhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaHViLmhvdmVySW5MYWJlbHNFdmVudCRcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLmhvdmVySW5MYWJlbHNFdmVudCA9IGV2ZW50O1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuaHViLmxhYmVsaW5nRXZlbnQkXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5sYWJlbGluZ0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICB9XG5cbiAgb25DbG9zZUxhYmVsTW9kYWwoKSB7XG4gICAgdGhpcy5odWIuc3RvcExhYmVsaW5nKCk7XG4gICAgdGhpcy5odWIucmVzdG9yZSgpO1xuICB9XG5cbiAgbWVzc2FnZUhhbmRsZXIgPSAoZTogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBpZCwgZXZlbnQsIGRhdGEgfSA9IGUuZGF0YTtcbiAgICBpZiAodGhpcy5odWIuaWQgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaHViLmxvZ0FsbEV2ZW50cykge1xuICAgICAgaWYgKCF0aGlzLmh1Yi5sb2dJZ25vcmVFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbQGJpeGkvbGFiZWxdIEV2ZW50KCR7dGhpcy5odWIuaWR9KWAsIGUuZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgRVZFTlRTLnJlYWR5OiB7XG4gICAgICAgIC8vIOWIneWni+WMluagh+azqOWZqFxuICAgICAgICB0aGlzLmh1Yi5zZXRSZWFkeSh0cnVlKTtcbiAgICAgICAgdGhpcy5odWIuaW5uZXJTZXRQYWdpbmF0aW9uKHtcbiAgICAgICAgICBwYWdlQ291bnQ6IGRhdGEucGFnZUNvdW50XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnpvb21DaGFuZ2U6IHtcbiAgICAgICAgdGhpcy5odWIuc2V0Wm9vbShkYXRhLnpvb20pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnN0YXJ0TGFiZWxpbmc6IHtcbiAgICAgICAgdGhpcy5odWIuc3RhcnRMYWJlbGluZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdGFydExhYmVsaW5nLmVtaXQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuZGVsZXRlTGFiZWxzOiB7XG4gICAgICAgIHRoaXMuaHViLmRlbGV0ZUxhYmVscyhkYXRhKTtcbiAgICAgICAgdGhpcy5kZWxldGVMYWJlbHMuZW1pdChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5wYWdpbmF0aW9uQ2hhbmdlOiB7XG4gICAgICAgIHRoaXMuaHViLmlubmVyU2V0UGFnaW5hdGlvbih7XG4gICAgICAgICAgcGFnZU51bWJlcjogZGF0YS5wYWdlTnVtYmVyXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnNlYXJjaFJlc3VsdDoge1xuICAgICAgICB0aGlzLmh1Yi5zZXRTZWFyY2hSZXN1bHQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuY2xpY2tMYWJlbHM6IHtcbiAgICAgICAgdGhpcy5jbGlja0xhYmVscy5lbWl0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLmhvdmVySW5MYWJlbDoge1xuICAgICAgICB0aGlzLmh1Yi5ob3ZlckluTGFiZWxzKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLmhvdmVyT3V0TGFiZWw6IHtcbiAgICAgICAgdGhpcy5odWIuaG92ZXJJbkxhYmVscyhudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5wZGZTY3JvbGxpbmc6IHtcbiAgICAgICAgaWYgKHRoaXMuaHViLmhvdmVySW5MYWJlbHNFdmVudCkge1xuICAgICAgICAgIHRoaXMuaHViLmhvdmVySW5MYWJlbHMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZGZTY3JvbGxpbmcuZW1pdCh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5wZGZMb2FkRmFpbGVkOiB7XG4gICAgICAgIHRoaXMucGRmTG9hZEZhaWxlZC5lbWl0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMubG9nOiB7XG4gICAgICAgIHRoaXMuaHViLnNldExvZyhkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5yZXNpemU6IHtcbiAgICAgICAgdGhpcy5odWIucmVzaXplJC5uZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMubWVyZ2VUYWJsZXM6IHtcbiAgICAgICAgdGhpcy5tZXJnZVRhYmxlcy5lbWl0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnNwbGl0VGFibGU6IHtcbiAgICAgICAgdGhpcy5zcGxpdFRhYmxlLmVtaXQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMudGJsT3BlcmF0aW9uUmVjb3Jkczoge1xuICAgICAgICB0aGlzLnRibE9wZXJhdGlvblJlY29yZHMuZW1pdChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmICh0aGlzLmh1Yi5sb2dVbmhhbmRsZWRFdmVudHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaHViLmxvZ0lnbm9yZUV2ZW50cy5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0BiaXhpL2xhYmVsXSBVbmhhbmRsZWQgRXZlbnQoJHt0aGlzLmh1Yi5pZH0pIGAsIGV2ZW50LCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmh1Yi5kZXN0b3J5KCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgfVxufVxuIl19