UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

426 lines 32 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material'; import { IsDuplicatePKError } from 'dbweb-core'; import { of, Subject } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import { Label } from '../../../services/eleview/types/label'; import { NodeTypeEnum } from '../../../services/eleview/types/model'; import { Node } from '../../../services/eleview/types/node'; export class EditLabel { /** * @param {?} svr * @param {?} snackBar */ constructor(svr, snackBar) { this.svr = svr; this.snackBar = snackBar; this.titleInput = true; this.isAdd = true; this.modify = false; } /** * @param {?} categoryID * @return {?} */ add(categoryID) { this.isAdd = true; this.titleInput = true; this.CategoryID = categoryID; this.Name = '新的标签'; this.title = this.Name; this.Conts = Node.fromInterface({ NodeType: NodeTypeEnum.unknow }); } /** * @return {?} */ done() { if (!this.title || this.title.length === 0) { alert('不能输入空的名称'); return false; } if (!this.isAdd && this.title !== this.Name) { this.modify = true; } this.Name = this.title; this.titleInput = false; return true; } /** * @return {?} */ edit() { this.title = this.Name; this.titleInput = true; } /** * @return {?} */ editCancel() { this.titleInput = false; } /** * @private * @param {?} whereString * @return {?} */ processSave(whereString) { if (this.isAdd) { return this.svr.backface .addLabel({ CategoryID: this.CategoryID, Name: this.Name, Conts: whereString, PlainText: this.PlainText }) .pipe(map((/** * @param {?} lbl * @return {?} */ lbl => { /** @type {?} */ const rev = Label.fromInterface(lbl); /** @type {?} */ const category = this.svr.categorys.find((/** * @param {?} v * @return {?} */ v => v.ID === lbl.CategoryID)); if (!category.Labels) { category.Labels = []; } category.Labels.push(rev); return true; })), catchError((/** * @param {?} err * @param {?} caught * @return {?} */ (err, caught) => { if (err instanceof HttpErrorResponse) { /** @type {?} */ const derr = IsDuplicatePKError(err.error); if (derr.Yes) { this.snackBar.open('名称重复', '关闭', { duration: 5000 }); } else { this.snackBar.open(err.error, '关闭', { duration: 5000 }); } } else { this.snackBar.open(err, '关闭', { duration: 5000 }); } return of(false); }))); } else { return this.svr.backface .updateLabel({ CategoryID: this.CategoryID, ID: this.LabelID, Name: this.Name, Conts: whereString, PlainText: this.PlainText }) .pipe(map((/** * @param {?} lbl * @return {?} */ lbl => { /** @type {?} */ const rev = this.svr.categorys .find((/** * @param {?} v * @return {?} */ v => v.ID === lbl.CategoryID)) .Labels.find((/** * @param {?} vv * @return {?} */ vv => vv.ID === lbl.ID)); rev.Name = lbl.Name; return true; }))); } } /** * @return {?} */ save() { // 如果正在修改名称,则自动进行确认,如果确认失败,则退出处理 if (this.titleInput) { if (!this.done()) { return of(false); } } /** @type {?} */ const rev = new Subject(); // 转换node-->string if (this.Conts && this.Conts.NodeType !== NodeTypeEnum.unknow) { this.svr.backface.nodeToString(this.Conts.toInterface()).subscribe((/** * @param {?} whereString * @return {?} */ whereString => { this.processSave(whereString).subscribe((/** * @param {?} v * @return {?} */ v => { rev.next(v); })); })); } else { return this.processSave(''); } return rev; } } if (false) { /** @type {?} */ EditLabel.prototype.CategoryID; /** @type {?} */ EditLabel.prototype.LabelID; /** @type {?} */ EditLabel.prototype.Name; /** @type {?} */ EditLabel.prototype.Conts; /** @type {?} */ EditLabel.prototype.PlainText; /** @type {?} */ EditLabel.prototype.titleInput; /** @type {?} */ EditLabel.prototype.isAdd; /** @type {?} */ EditLabel.prototype.title; /** @type {?} */ EditLabel.prototype.readonly; /** @type {?} */ EditLabel.prototype.modify; /** * @type {?} * @private */ EditLabel.prototype.svr; /** * @type {?} * @private */ EditLabel.prototype.snackBar; } export class LabelManagerService { /** * @param {?} snackBar */ constructor(snackBar) { this.snackBar = snackBar; this.editLabel = new EditLabel(this, this.snackBar); } /** * @param {?} CategoryID * @param {?} LabelID * @return {?} */ removeLabel(CategoryID, LabelID) { return this.backface.removeLabel({ CategoryID: CategoryID, ID: LabelID }).pipe(tap((/** * @param {?} v * @return {?} */ v => { if (v) { /** @type {?} */ const labels = this.categorys.find((/** * @param {?} vv * @return {?} */ vv => vv.ID === CategoryID)).Labels; labels.splice(labels.findIndex((/** * @param {?} vv * @return {?} */ vv => vv.ID === LabelID)), 1); } }))); } /** * @param {?} id * @return {?} */ removeCategory(id) { return this.backface.removeCategory(id).pipe(tap((/** * @param {?} v * @return {?} */ v => { if (v) { this.categorys.splice(this.categorys.findIndex((/** * @param {?} vv * @return {?} */ vv => vv.ID === id)), 1); this.categorys.forEach((/** * @param {?} vv * @param {?} idx * @return {?} */ (vv, idx) => (vv.Position = idx + 1))); } }))); } /** * @param {?} param * @return {?} */ addCategory(param) { return this.backface .addCategory({ EleName: this.eleName, Name: param.name, OwnerBy: this.ownerBy, BeforeAtID: param.beforeAtID }) .pipe(tap((/** * @param {?} v * @return {?} */ v => { // 调整位置并插入 if (param.beforeAtID) { /** @type {?} */ const idx = this.categorys.findIndex((/** * @param {?} vv * @return {?} */ vv => vv.ID === param.beforeAtID)); this.categorys.splice(idx, 0, v); } else { this.categorys.push(v); } this.categorys.forEach((/** * @param {?} vv * @param {?} idx * @return {?} */ (vv, idx) => (vv.Position = idx + 1))); }))); } /** * @param {?} param * @return {?} */ editCategory(param) { return this.backface .updateCategory({ ID: param.id, Name: param.name, OwnerBy: this.ownerBy }) .pipe(tap((/** * @param {?} v * @return {?} */ v => { this.categorys.find((/** * @param {?} vv * @return {?} */ vv => vv.ID === param.id)).Name = param.name; }))); } /** * @return {?} */ fetchCategoryLabelHis() { return this.backface.fetchCategoryLabelHis({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: [this.owner] }); } /** * @return {?} */ fetchCategories() { this.backface .fetchCategories({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: this.owner }) .subscribe((/** * @param {?} v * @return {?} */ v => { this.categorys = v; })); } /** * @param {?} cate * @param {?} idx * @return {?} */ setCategoryPosition(cate, idx) { this.backface.setCategoryPosition({ ID: cate.ID, Position: idx }).subscribe((/** * @param {?} v * @return {?} */ v => { // 先赋值position v.forEach((/** * @param {?} vv * @return {?} */ vv => { /** @type {?} */ const findc = this.categorys.find((/** * @param {?} c * @return {?} */ c => c.ID === vv.ID)); if (findc) { findc.Position = vv.Position; } })); // 再排序 this.categorys.sort((/** * @param {?} a * @param {?} b * @return {?} */ (a, b) => a.Position - b.Position)); })); } } LabelManagerService.decorators = [ { type: Injectable } ]; /** @nocollapse */ LabelManagerService.ctorParameters = () => [ { type: MatSnackBar } ]; if (false) { /** @type {?} */ LabelManagerService.prototype.eleName; /** @type {?} */ LabelManagerService.prototype.ownerBy; /** @type {?} */ LabelManagerService.prototype.owner; /** @type {?} */ LabelManagerService.prototype.categorys; /** @type {?} */ LabelManagerService.prototype.editLabel; /** @type {?} */ LabelManagerService.prototype.allColumnsWithLetter; /** @type {?} */ LabelManagerService.prototype.backface; /** * @type {?} * @private */ LabelManagerService.prototype.snackBar; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2xhYmVsLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFxQixZQUFZLEVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUQsTUFBTSxPQUFPLFNBQVM7Ozs7O0lBWXJCLFlBQW9CLEdBQXdCLEVBQVUsUUFBcUI7UUFBdkQsUUFBRyxHQUFILEdBQUcsQ0FBcUI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBTDNFLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUdiLFdBQU0sR0FBRyxLQUFLLENBQUM7SUFDK0QsQ0FBQzs7Ozs7SUFDL0UsR0FBRyxDQUFDLFVBQWtCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElB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QUMsRUFBQyxDQUFDO1lBQ0gsTUFBTTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDO1FBQ3hELENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7O1lBNUZELFVBQVU7Ozs7WUE5SEYsV0FBVzs7OztJQWlJbkIsc0NBQWdCOztJQUNoQixzQ0FBcUI7O0lBQ3JCLG9DQUFjOztJQUVkLHdDQUFzQjs7SUFDdEIsd0NBQStDOztJQUMvQyxtREFBd0M7O0lBQ3hDLHVDQUFtQjs7Ozs7SUFDUCx1Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgSXNEdXBsaWNhdGVQS0Vycm9yIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwLCBjb25jYXRNYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbGFiZWwnO1xyXG5pbXBvcnQgeyBDb2x1bW5zV2l0aExldHRlciwgTm9kZVR5cGVFbnVtLCBPd25lckJ5RW51bSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbW9kZWwnO1xyXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9ub2RlJztcclxuaW1wb3J0IHsgQmFja0ZhY2UgfSBmcm9tICcuL2JhY2tmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0TGFiZWwge1xyXG5cdENhdGVnb3J5SUQ6IHN0cmluZztcclxuXHRMYWJlbElEOiBzdHJpbmc7XHJcblx0TmFtZTogc3RyaW5nO1xyXG5cdENvbnRzPzogTm9kZTtcclxuXHRQbGFpblRleHQ/OiBzdHJpbmc7XHJcblxyXG5cdHRpdGxlSW5wdXQgPSB0cnVlO1xyXG5cdGlzQWRkID0gdHJ1ZTtcclxuXHR0aXRsZT86IHN0cmluZztcclxuXHRyZWFkb25seT86IGJvb2xlYW47XHJcblx0bW9kaWZ5ID0gZmFsc2U7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzdnI6IExhYmVsTWFuYWdlclNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7fVxyXG5cdGFkZChjYXRlZ29yeUlEOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuaXNBZGQgPSB0cnVlO1xyXG5cdFx0dGhpcy50aXRsZUlucHV0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuQ2F0ZWdvcnlJRCA9IGNhdGVnb3J5SUQ7XHJcblx0XHR0aGlzLk5hbWUgPSAn5paw55qE5qCH562+JztcclxuXHRcdHRoaXMudGl0bGUgPSB0aGlzLk5hbWU7XHJcblx0XHR0aGlzLkNvbnRzID0gTm9kZS5mcm9tSW50ZXJmYWNlKHsgTm9kZVR5cGU6IE5vZGVUeXBlRW51bS51bmtub3cgfSk7XHJcblx0fVxyXG5cdGRvbmUoKSB7XHJcblx0XHRpZiAoIXRoaXMudGl0bGUgfHwgdGhpcy50aXRsZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0YWxlcnQoJ+S4jeiDvei+k+WFpeepuueahOWQjeensCcpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMuaXNBZGQgJiYgdGhpcy50aXRsZSAhPT0gdGhpcy5OYW1lKSB7XHJcblx0XHRcdHRoaXMubW9kaWZ5ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHRoaXMuTmFtZSA9IHRoaXMudGl0bGU7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRlZGl0KCkge1xyXG5cdFx0dGhpcy50aXRsZSA9IHRoaXMuTmFtZTtcclxuXHRcdHRoaXMudGl0bGVJbnB1dCA9IHRydWU7XHJcblx0fVxyXG5cdGVkaXRDYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1NhdmUod2hlcmVTdHJpbmc6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0aWYgKHRoaXMuaXNBZGQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc3ZyLmJhY2tmYWNlXHJcblx0XHRcdFx0LmFkZExhYmVsKHtcclxuXHRcdFx0XHRcdENhdGVnb3J5SUQ6IHRoaXMuQ2F0ZWdvcnlJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IExhYmVsLmZyb21JbnRlcmZhY2UobGJsKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY2F0ZWdvcnkgPSB0aGlzLnN2ci5jYXRlZ29yeXMuZmluZCh2ID0+IHYuSUQgPT09IGxibC5DYXRlZ29yeUlEKTtcclxuXHRcdFx0XHRcdFx0aWYgKCFjYXRlZ29yeS5MYWJlbHMpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMgPSBbXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMucHVzaChyZXYpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVyciA9IElzRHVwbGljYXRlUEtFcnJvcihlcnIuZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkZXJyLlllcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKCflkI3np7Dph43lpI0nLCAn5YWz6ZetJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKGVyci5lcnJvciwgJ+WFs+mXrScsIHsgZHVyYXRpb246IDUwMDAgfSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc25hY2tCYXIub3BlbihlcnIsICflhbPpl60nLCB7IGR1cmF0aW9uOiA1MDAwIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBvZihmYWxzZSk7XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zdnIuYmFja2ZhY2VcclxuXHRcdFx0XHQudXBkYXRlTGFiZWwoe1xyXG5cdFx0XHRcdFx0Q2F0ZWdvcnlJRDogdGhpcy5DYXRlZ29yeUlELFxyXG5cdFx0XHRcdFx0SUQ6IHRoaXMuTGFiZWxJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IHRoaXMuc3ZyLmNhdGVnb3J5c1xyXG5cdFx0XHRcdFx0XHRcdC5maW5kKHYgPT4gdi5JRCA9PT0gbGJsLkNhdGVnb3J5SUQpXHJcblx0XHRcdFx0XHRcdFx0LkxhYmVscy5maW5kKHZ2ID0+IHZ2LklEID09PSBsYmwuSUQpO1xyXG5cdFx0XHRcdFx0XHRyZXYuTmFtZSA9IGxibC5OYW1lO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2F2ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdC8vIOWmguaenOato+WcqOS/ruaUueWQjeensO+8jOWImeiHquWKqOi/m+ihjOehruiupO+8jOWmguaenOehruiupOWksei0pe+8jOWImemAgOWHuuWkhOeQhlxyXG5cdFx0aWYgKHRoaXMudGl0bGVJbnB1dCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuZG9uZSgpKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9mKGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcmV2ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcblx0XHQvLyDovazmjaJub2RlLS0+c3RyaW5nXHJcblx0XHRpZiAodGhpcy5Db250cyAmJiB0aGlzLkNvbnRzLk5vZGVUeXBlICE9PSBOb2RlVHlwZUVudW0udW5rbm93KSB7XHJcblx0XHRcdHRoaXMuc3ZyLmJhY2tmYWNlLm5vZGVUb1N0cmluZyh0aGlzLkNvbnRzLnRvSW50ZXJmYWNlKCkpLnN1YnNjcmliZSh3aGVyZVN0cmluZyA9PiB7XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzU2F2ZSh3aGVyZVN0cmluZykuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0cmV2Lm5leHQodik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1NhdmUoJycpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJldjtcclxuXHR9XHJcbn1cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGFiZWxNYW5hZ2VyU2VydmljZSB7XHJcblx0Ly8g5Yid5aeL5YyW5pe26K6+572uXHJcblx0ZWxlTmFtZTogc3RyaW5nO1xyXG5cdG93bmVyQnk6IE93bmVyQnlFbnVtO1xyXG5cdG93bmVyOiBzdHJpbmc7XHJcblx0Ly8g5omA5pyJ55qE5qCH562+5pWw5o2uXHJcblx0Y2F0ZWdvcnlzOiBDYXRlZ29yeVtdO1xyXG5cdGVkaXRMYWJlbCA9IG5ldyBFZGl0TGFiZWwodGhpcywgdGhpcy5zbmFja0Jhcik7XHJcblx0YWxsQ29sdW1uc1dpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyO1xyXG5cdGJhY2tmYWNlOiBCYWNrRmFjZTtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cclxuXHRyZW1vdmVMYWJlbChDYXRlZ29yeUlEOiBzdHJpbmcsIExhYmVsSUQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UucmVtb3ZlTGFiZWwoeyBDYXRlZ29yeUlEOiBDYXRlZ29yeUlELCBJRDogTGFiZWxJRCB9KS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuY2F0ZWdvcnlzLmZpbmQodnYgPT4gdnYuSUQgPT09IENhdGVnb3J5SUQpLkxhYmVscztcclxuXHRcdFx0XHRcdGxhYmVscy5zcGxpY2UobGFiZWxzLmZpbmRJbmRleCh2diA9PiB2di5JRCA9PT0gTGFiZWxJRCksIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdHJlbW92ZUNhdGVnb3J5KGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLnJlbW92ZUNhdGVnb3J5KGlkKS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNwbGljZSh0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IGlkKSwgMSk7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IHsgbmFtZTogc3RyaW5nOyBiZWZvcmVBdElEPzogc3RyaW5nIH0pIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5hZGRDYXRlZ29yeSh7XHJcblx0XHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRcdE5hbWU6IHBhcmFtLm5hbWUsXHJcblx0XHRcdFx0T3duZXJCeTogdGhpcy5vd25lckJ5LFxyXG5cdFx0XHRcdEJlZm9yZUF0SUQ6IHBhcmFtLmJlZm9yZUF0SURcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g6LCD5pW05L2N572u5bm25o+S5YWlXHJcblx0XHRcdFx0XHRpZiAocGFyYW0uYmVmb3JlQXRJRCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpZHggPSB0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IHBhcmFtLmJlZm9yZUF0SUQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5zcGxpY2UoaWR4LCAwLCB2KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnB1c2godik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZWRpdENhdGVnb3J5KHBhcmFtOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQudXBkYXRlQ2F0ZWdvcnkoe1xyXG5cdFx0XHRcdElEOiBwYXJhbS5pZCxcclxuXHRcdFx0XHROYW1lOiBwYXJhbS5uYW1lLFxyXG5cdFx0XHRcdE93bmVyQnk6IHRoaXMub3duZXJCeVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5maW5kKHZ2ID0+IHZ2LklEID09PSBwYXJhbS5pZCkuTmFtZSA9IHBhcmFtLm5hbWU7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHtcclxuXHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiB0aGlzLm93bmVyQnksXHJcblx0XHRcdE93bmVyOiBbdGhpcy5vd25lcl1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMoKSB7XHJcblx0XHR0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5mZXRjaENhdGVnb3JpZXMoeyBFbGVOYW1lOiB0aGlzLmVsZU5hbWUsIE93bmVyQnk6IHRoaXMub3duZXJCeSwgT3duZXI6IHRoaXMub3duZXIgfSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLmNhdGVnb3J5cyA9IHY7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHRzZXRDYXRlZ29yeVBvc2l0aW9uKGNhdGU6IENhdGVnb3J5LCBpZHg6IG51bWJlcikge1xyXG5cdFx0dGhpcy5iYWNrZmFjZS5zZXRDYXRlZ29yeVBvc2l0aW9uKHsgSUQ6IGNhdGUuSUQsIFBvc2l0aW9uOiBpZHggfSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHQvLyDlhYjotYvlgLxwb3NpdGlvblxyXG5cdFx0XHR2LmZvckVhY2godnYgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGZpbmRjID0gdGhpcy5jYXRlZ29yeXMuZmluZChjID0+IGMuSUQgPT09IHZ2LklEKTtcclxuXHRcdFx0XHRpZiAoZmluZGMpIHtcclxuXHRcdFx0XHRcdGZpbmRjLlBvc2l0aW9uID0gdnYuUG9zaXRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8g5YaN5o6S5bqPXHJcblx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNvcnQoKGEsIGIpID0+IGEuUG9zaXRpb24gLSBiLlBvc2l0aW9uKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=