UNPKG

dbweb-common

Version:

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

368 lines 34.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, HostBinding, Input, ViewChild, Output, EventEmitter } from '@angular/core'; import { CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop'; import { Order } from './model'; import * as pinyin_ from 'pinyin'; import { MatIconRegistry } from '@angular/material'; import { DomSanitizer } from '@angular/platform-browser'; /** @type {?} */ var pinyin = pinyin_; var ViewDefineComponent = /** @class */ (function () { function ViewDefineComponent(iconRegistry, sanitizer) { this.hostClass = true; this.ModifyEvent = new EventEmitter(); this.checkColumns = new Map(); this.orderAsc = Order.OrderAsc; this.orderDesc = Order.OrderDesc; this.orderNone = Order.OrderNone; /** @type {?} */ var icons = [ 'all_chosen', 'cancel_chosen', 'return_chosen', 'single_chosen', 'double_down', 'drag_indicator', 'arrow_collapse', 'arrow_expand', 'sorting_arrows', 'color_add', 'file_copy', 'bg_bottom_out' ]; icons.forEach((/** * @param {?} v * @return {?} */ function (v) { iconRegistry.addSvgIcon(v, sanitizer.bypassSecurityTrustResourceUrl('assets/record-view/icon/' + v + '.svg')); })); } Object.defineProperty(ViewDefineComponent.prototype, "AllColumns", { set: /** * @param {?} val * @return {?} */ function (val) { this._allColumns = val; this.refreshSelectedColumns(this._selectedColumns); }, enumerable: true, configurable: true }); Object.defineProperty(ViewDefineComponent.prototype, "SelectedColumns", { set: /** * @param {?} val * @return {?} */ function (val) { this.refreshSelectedColumns(val); }, enumerable: true, configurable: true }); /** * @return {?} */ ViewDefineComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @private * @return {?} */ ViewDefineComponent.prototype.refreshCanSelectColumns = /** * @private * @return {?} */ function () { var _this = this; if (this._allColumns) { this.CanSelectColumns = map2WithLetter(this._allColumns.filter((/** * @param {?} col * @return {?} */ function (col) { return !_this._selectedColumns || !_this._selectedColumns.find((/** * @param {?} sel * @return {?} */ function (sel) { return sel.Name === col; })); }))); } }; /** * @private * @param {?=} cols * @return {?} */ ViewDefineComponent.prototype.refreshSelectedColumns = /** * @private * @param {?=} cols * @return {?} */ function (cols) { this.checkColumns.clear(); this._selectedColumns = cols; this.refreshCanSelectColumns(); }; /** * @param {?} event * @return {?} */ ViewDefineComponent.prototype.drop = /** * @param {?} event * @return {?} */ function (event) { if (event.container === this.rightList) { // 右边内部移动 if (event.previousContainer === event.container) { moveItemInArray(event.container.data, event.previousIndex, event.currentIndex); } else { // 从左边拖到右边 this._selectedColumns = this._selectedColumns || []; this._selectedColumns.splice(event.currentIndex, 0, (/** @type {?} */ ({ Name: event.item.data, Hidden: false, Order: Order.OrderNone }))); this.refreshCanSelectColumns(); } } else if (event.previousContainer !== event.container) { // 从右边拖动到左边 event.previousContainer.data.splice(event.previousIndex, 1); this.refreshCanSelectColumns(); } this.emitModify(); }; /** * @param {?} event * @return {?} */ ViewDefineComponent.prototype.chkSelectChange = /** * @param {?} event * @return {?} */ function (event) { if (event.checked) { this.checkColumns.set(event.source.value, true); } else { this.checkColumns.delete(event.source.value); } }; /** * @param {?} colName * @return {?} */ ViewDefineComponent.prototype.toRight = /** * @param {?} colName * @return {?} */ function (colName) { this._selectedColumns = this._selectedColumns || []; this._selectedColumns.push((/** @type {?} */ ({ Name: colName, Hidden: false, Order: Order.OrderNone }))); this.refreshCanSelectColumns(); this.emitModify(); }; /** * @param {?} idx * @return {?} */ ViewDefineComponent.prototype.toLeft = /** * @param {?} idx * @return {?} */ function (idx) { this._selectedColumns.splice(idx, 1); this.refreshCanSelectColumns(); this.emitModify(); }; /** * @param {?} event * @return {?} */ ViewDefineComponent.prototype.checkAll = /** * @param {?} event * @return {?} */ function (event) { var _this = this; if (event.checked) { this.checkColumns.clear(); this.CanSelectColumns.forEach((/** * @param {?} item * @return {?} */ function (item) { item.Columns.forEach((/** * @param {?} node * @return {?} */ function (node) { _this.checkColumns.set(node, true); // console.log(this.checkColumns.get(node)); })); })); } else { this.checkColumns.clear(); } }; /** * @return {?} */ ViewDefineComponent.prototype.toRightAll = /** * @return {?} */ function () { var _this = this; this._selectedColumns = this._selectedColumns || []; this.CanSelectColumns.forEach((/** * @param {?} v * @return {?} */ function (v) { v.Columns.forEach((/** * @param {?} col * @return {?} */ function (col) { if (_this.checkColumns.has(col)) { _this._selectedColumns.push((/** @type {?} */ ({ Name: col, Hidden: false, Order: Order.OrderNone }))); } })); })); this.refreshCanSelectColumns(); this.emitModify(); }; /** * @param {?} letter * @return {?} */ ViewDefineComponent.prototype.acronymFun = /** * @param {?} letter * @return {?} */ function (letter) { document.querySelector('#' + letter).scrollIntoView(true); }; /** * @return {?} */ ViewDefineComponent.prototype.emitModify = /** * @return {?} */ function () { this.ModifyEvent.emit(this._selectedColumns); }; ViewDefineComponent.decorators = [ { type: Component, args: [{ selector: 'common-view-define', template: "<div class=\"main\">\r\n\t<div\r\n\t\t[class.\u9690\u85CF]=\"readonly\"\r\n\t\tclass=\"left-columns column-padding\"\r\n\t\tcdkDropList\r\n\t\t#leftList=\"cdkDropList\"\r\n\t\t[cdkDropListData]=\"CanSelectColumns\"\r\n\t\t[cdkDropListSortingDisabled]=\"true\"\r\n\t\t[cdkDropListConnectedTo]=\"[rightList]\"\r\n\t\t(cdkDropListDropped)=\"drop($event)\"\r\n\t>\r\n\t\t<div class=\"column-title\">\u5176\u4ED6\u5217</div>\r\n\t\t<div class=\"column-list\">\r\n\t\t\t<div *ngFor=\"let list of CanSelectColumns\">\r\n\t\t\t\t<div class=\"letter-color \u6307\u6807\u9996\u5B57\u6BCD\" id=\"{{ list.Letter }}\">\r\n\t\t\t\t\t{{ list.Letter | uppercase }}\r\n\t\t\t\t</div>\r\n\t\t\t\t<span\r\n\t\t\t\t\tmat-button\r\n\t\t\t\t\tclass=\"\u5217 \u5217\u5BBD\"\r\n\t\t\t\t\t*ngFor=\"let column of list.Columns; let index = index\"\r\n\t\t\t\t\tcdkDrag\r\n\t\t\t\t\t[cdkDragData]=\"column\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\tclass=\"checkbox\"\r\n\t\t\t\t\t\t[value]=\"column\"\r\n\t\t\t\t\t\t[checked]=\"checkColumns.get(column)\"\r\n\t\t\t\t\t\t(change)=\"chkSelectChange($event)\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span>{{ column }}</span>\r\n\t\t\t\t\t</mat-checkbox>\r\n\r\n\t\t\t\t\t<mat-icon class=\"\u663E\u793A\u5217\u524D\u6807\u7B7E \u6D6E\u52A8\u663E\u793A \u56FE\u6807\u5927\u5C0F\" svgIcon=\"drag_indicator\" cdkDragHandle></mat-icon>\r\n\t\t\t\t\t<div class=\"\u8981\u663E\u793A\u5217-\u529F\u80FD\u56FE\u6807 \u6D6E\u52A8\u663E\u793A\">\r\n\t\t\t\t\t\t<button mat-icon-button class=\"\u56FE\u6807\u6D9F\u6F2A\" (click)=\"toRight(column)\">\r\n\t\t\t\t\t\t\t<mat-icon class=\"\u4EAE\u8272\u5B57\u4F53 \u56FE\u6807\u5927\u5C0F\" svgIcon=\"last_page\"> </mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"letter-list\">\r\n\t\t\t<div *ngFor=\"let list of CanSelectColumns\">\r\n\t\t\t\t<div class=\"letter-color \u5C45\u4E2D\" (click)=\"acronymFun(list.Letter)\">\r\n\t\t\t\t\t{{ list.Letter | uppercase }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"\u5168\u9009\">\r\n\t\t\t<mat-checkbox (change)=\"checkAll($event)\">\r\n\t\t\t\t<span>\u5168\u9009</span>\r\n\t\t\t</mat-checkbox>\r\n\t\t\t<mat-icon class=\"\u5168\u9009\u56FE\u6807\" (click)=\"toRightAll()\" svgIcon=\"last_page\"> </mat-icon>\r\n\t\t</div>\r\n\t</div>\r\n\t<div\r\n\t\tclass=\"right column-padding\"\r\n\t\tcdkDropList\r\n\t\t#rightList=\"cdkDropList\"\r\n\t\t[cdkDropListData]=\"_selectedColumns\"\r\n\t\t[cdkDropListConnectedTo]=\"[leftList]\"\r\n\t\t(cdkDropListDropped)=\"drop($event)\"\r\n\t>\r\n\t\t<div class=\"column-title\">\u663E\u793A\u7684\u5217</div>\r\n\t\t<div\r\n\t\t\t*ngFor=\"let column of _selectedColumns; let index = index\"\r\n\t\t\tclass=\"\u5217\"\r\n\t\t\t[class.\u900F\u660E\u5EA6]=\"column.Hidden == true\"\r\n\t\t\t[cdkDragDisabled]=\"readonly\"\r\n\t\t\tcdkDrag\r\n\t\t>\r\n\t\t\t{{ index + 1 }} {{ column.Name }}\r\n\t\t\t<mat-icon class=\"\u663E\u793A\u5217\u524D\u6807\u7B7E \u6D6E\u52A8\u663E\u793A \u56FE\u6807\u5927\u5C0F\" svgIcon=\"drag_indicator\" cdkDragHandle></mat-icon>\r\n\t\t\t<mat-icon\r\n\t\t\t\t*ngIf=\"column.Order === orderDesc\"\r\n\t\t\t\tclass=\"\u663E\u793A\u5217\u524D\u6807\u7B7E \u6392\u5E8F \u56FE\u6807\u5927\u5C0F\"\r\n\t\t\t\tsvgIcon=\"arrow_downward\"\r\n\t\t\t></mat-icon>\r\n\t\t\t<mat-icon\r\n\t\t\t\t*ngIf=\"column.Order === orderAsc\"\r\n\t\t\t\tclass=\"\u663E\u793A\u5217\u524D\u6807\u7B7E \u6392\u5E8F \u56FE\u6807\u5927\u5C0F\"\r\n\t\t\t\tsvgIcon=\"arrow_upward\"\r\n\t\t\t></mat-icon>\r\n\t\t\t<div *ngIf=\"!readonly\" class=\"\u8981\u663E\u793A\u5217-\u529F\u80FD\u56FE\u6807 \u6D6E\u52A8\u663E\u793A\">\r\n\t\t\t\t<button mat-icon-button class=\"\u56FE\u6807\u6D9F\u6F2A\" (click)=\"column.Hidden = !column.Hidden; emitModify();\">\r\n\t\t\t\t\t<mat-icon class=\"\u56FE\u6807\u5927\u5C0F\" [svgIcon]=\"column.Hidden ? 'visibility_off' : 'visibility'\"> </mat-icon>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<ng-container [ngSwitch]=\"column.Order\">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tclass=\"\u56FE\u6807\u6D9F\u6F2A\"\r\n\t\t\t\t\t\t*ngSwitchCase=\"orderAsc\"\r\n\t\t\t\t\t\t(click)=\"column.Order = orderNone;emitModify();\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon class=\"\u56FE\u6807\u5927\u5C0F\" svgIcon=\"arrow_upward\"> </mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tclass=\"\u56FE\u6807\u6D9F\u6F2A\"\r\n\t\t\t\t\t\t*ngSwitchCase=\"orderDesc\"\r\n\t\t\t\t\t\t(click)=\"column.Order = orderAsc; emitModify();\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon class=\"\u56FE\u6807\u5927\u5C0F\" svgIcon=\"arrow_downward\"> </mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\tclass=\"\u56FE\u6807\u6D9F\u6F2A\"\r\n\t\t\t\t\t\t*ngSwitchDefault\r\n\t\t\t\t\t\t(click)=\"column.Order = orderDesc;emitModify();\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<mat-icon class=\"\u56FE\u6807\u5927\u5C0F\" svgIcon=\"sorting_arrows\"> </mat-icon>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<button mat-icon-button class=\"\u56FE\u6807\u6D9F\u6F2A\" (click)=\"toLeft(index)\">\r\n\t\t\t\t\t<mat-icon class=\"\u4EAE\u8272\u5B57\u4F53 \u56FE\u6807\u5927\u5C0F \u65CB\u8F6C\" svgIcon=\"last_page\"> </mat-icon>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.main{width:100%;height:100%;display:flex;flex-direction:row}.main .left-columns{max-width:248px;min-width:170px;flex-grow:1;height:100%;position:relative}.main .left-columns .column-list{height:calc(100% - 48px);max-height:100%;margin:0;overflow-y:auto}.main .left-columns .letter-list{height:calc(100% - 34px);position:absolute;top:34px;right:0;z-index:1;overflow-y:auto}.main .left-columns .\u5168\u9009{width:128px;height:32px;line-height:24px;border-radius:16px;position:absolute;left:0;bottom:8px;font-size:16px;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.main .left-columns .\u5168\u9009 .mat-checkbox{padding-left:16px;vertical-align:top!important;margin:0}.main .left-columns .\u5168\u9009 .\u5168\u9009\u56FE\u6807{position:absolute;top:4px;right:16px;width:24px;height:24px;font-size:24px;line-height:16px;cursor:pointer}.main .left-columns .letter-color{width:20px;font-size:12px;text-align:center}.main .left-columns .\u6307\u6807\u9996\u5B57\u6BCD{margin:8px 8px 4px}.main .left-columns .\u5C45\u4E2D{text-align:center;cursor:pointer}.main .right{flex-grow:2;min-width:200px;height:100%;position:relative}.main .column-padding{display:block;padding-top:32px;box-sizing:border-box}.main .column-padding .column-title{height:16px;border-left:4px solid #000;padding-left:12px;font-size:14px;position:absolute;top:8px;left:0}.main .\u65CB\u8F6C{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.main .\u900F\u660E\u5EA6{opacity:.5}.main .\u9690\u85CF{display:none}.\u5217{display:block;height:32px;line-height:32px;padding:0 24px;box-sizing:border-box;text-align:left;font-size:14px;cursor:pointer;position:relative}.\u5217 .\u6D6E\u52A8\u663E\u793A{display:none}.\u5217 .\u663E\u793A\u5217\u524D\u6807\u7B7E{position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.\u5217 .\u6392\u5E8F{display:block}.\u5217 .\u8981\u663E\u793A\u5217-\u529F\u80FD\u56FE\u6807{height:32px;line-height:32px;position:absolute;right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.\u5217 .\u56FE\u6807\u5927\u5C0F{width:16px;height:16px;line-height:16px}.\u5217 .\u56FE\u6807\u6D9F\u6F2A{width:32px;height:32px;text-align:center;line-height:32px;vertical-align:top}.\u5217:hover{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);z-index:5}.\u5217:hover .\u6D6E\u52A8\u663E\u793A{display:block}.\u5217:hover .\u6392\u5E8F{display:none}.\u5217\u5BBD{width:calc(100% - 24px)}"] }] } ]; /** @nocollapse */ ViewDefineComponent.ctorParameters = function () { return [ { type: MatIconRegistry }, { type: DomSanitizer } ]; }; ViewDefineComponent.propDecorators = { hostClass: [{ type: HostBinding, args: ['class.view-define',] }], readonly: [{ type: Input }], AllColumns: [{ type: Input }], ModifyEvent: [{ type: Output }], leftList: [{ type: ViewChild, args: ['leftList', { static: false },] }], rightList: [{ type: ViewChild, args: ['rightList', { static: false },] }], SelectedColumns: [{ type: Input }] }; return ViewDefineComponent; }()); export { ViewDefineComponent }; if (false) { /** @type {?} */ ViewDefineComponent.prototype.hostClass; /** @type {?} */ ViewDefineComponent.prototype.readonly; /** @type {?} */ ViewDefineComponent.prototype.ModifyEvent; /** @type {?} */ ViewDefineComponent.prototype._allColumns; /** @type {?} */ ViewDefineComponent.prototype.leftList; /** @type {?} */ ViewDefineComponent.prototype.rightList; /** @type {?} */ ViewDefineComponent.prototype.CanSelectColumns; /** @type {?} */ ViewDefineComponent.prototype._selectedColumns; /** @type {?} */ ViewDefineComponent.prototype.checkColumns; /** @type {?} */ ViewDefineComponent.prototype.orderAsc; /** @type {?} */ ViewDefineComponent.prototype.orderDesc; /** @type {?} */ ViewDefineComponent.prototype.orderNone; } /** * @param {?} v * @return {?} */ function map2WithLetter(v) { /** @type {?} */ var mapList = new Map(); v.forEach((/** * @param {?} vv * @return {?} */ function (vv) { /** @type {?} */ var headerLetter = pinyin(vv, { style: pinyin.STYLE_FIRST_LETTER }).map((/** * @param {?} s * @return {?} */ function (s) { return s[0]; }))[0]; if (headerLetter.length > 1) { headerLetter = headerLetter[0]; } if (mapList.has(headerLetter)) { mapList.get(headerLetter).push(vv); } else { mapList.set(headerLetter, [vv]); } })); // 排序 /** @type {?} */ var rev = (/** @type {?} */ ([])); mapList.forEach((/** * @param {?} columns * @param {?} letter * @return {?} */ function (columns, letter) { rev.push((/** @type {?} */ ({ Letter: letter, Columns: columns }))); })); return rev.sort((/** * @param {?} a * @param {?} b * @return {?} */ function (a, b) { return a.Letter.localeCompare(b.Letter); })); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1kZWZpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvdmlldy1kZWZpbmUvdmlldy1kZWZpbmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLFdBQVcsRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQXFDLEtBQUssRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUNoRixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7SUFDbkQsTUFBTSxHQUFHLE9BQU87QUFDdEI7SUEwQkMsNkJBQVksWUFBNkIsRUFBRSxTQUF1QjtRQXBCaEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQU16QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBVTdELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDMUIsY0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDNUIsY0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7O1lBRTlCLEtBQUssR0FBRztZQUNiLFlBQVk7WUFDWixlQUFlO1lBQ2YsZUFBZTtZQUNmLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxXQUFXO1lBQ1gsZUFBZTtTQUNm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QUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoQztJQUNGLENBQUMsRUFBQyxDQUFDOzs7UUFHRyxHQUFHLEdBQUcsbUJBQUEsRUFBRSxFQUF1QjtJQUNyQyxPQUFPLENBQUMsT0FBTzs7Ozs7SUFBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQUEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBcUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsRUFBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUMsSUFBSTs7Ozs7SUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQWhDLENBQWdDLEVBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcm9wTGlzdCwgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBDb2x1bW5zV2l0aExldHRlciwgSURpc3BsYXlDb2x1bW4sIE9yZGVyLCBJQ29sdW1uVHlwZSB9IGZyb20gJy4vbW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBwaW55aW5fIGZyb20gJ3Bpbnlpbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlLCBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5jb25zdCBwaW55aW4gPSBwaW55aW5fO1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi12aWV3LWRlZmluZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3ZpZXctZGVmaW5lLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi92aWV3LWRlZmluZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3RGVmaW5lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLnZpZXctZGVmaW5lJykgaG9zdENsYXNzID0gdHJ1ZTtcclxuXHRASW5wdXQoKSByZWFkb25seTogYm9vbGVhbjtcclxuXHRASW5wdXQoKSBzZXQgQWxsQ29sdW1ucyh2YWw6IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLl9hbGxDb2x1bW5zID0gdmFsO1xyXG5cdFx0dGhpcy5yZWZyZXNoU2VsZWN0ZWRDb2x1bW5zKHRoaXMuX3NlbGVjdGVkQ29sdW1ucyk7XHJcblx0fVxyXG5cdEBPdXRwdXQoKSBNb2RpZnlFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SURpc3BsYXlDb2x1bW5bXT4oKTtcclxuXHRfYWxsQ29sdW1uczogc3RyaW5nW107XHJcblx0QFZpZXdDaGlsZCgnbGVmdExpc3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgbGVmdExpc3Q6IENka0Ryb3BMaXN0O1xyXG5cdEBWaWV3Q2hpbGQoJ3JpZ2h0TGlzdCcsIHsgc3RhdGljOiBmYWxzZSB9KSByaWdodExpc3Q6IENka0Ryb3BMaXN0O1xyXG5cdENhblNlbGVjdENvbHVtbnM/OiBDb2x1bW5zV2l0aExldHRlcltdO1xyXG5cdEBJbnB1dCgpIHNldCBTZWxlY3RlZENvbHVtbnModmFsOiBJRGlzcGxheUNvbHVtbltdKSB7XHJcblx0XHR0aGlzLnJlZnJlc2hTZWxlY3RlZENvbHVtbnModmFsKTtcclxuXHR9XHJcblxyXG5cdF9zZWxlY3RlZENvbHVtbnM6IElEaXNwbGF5Q29sdW1uW107XHJcblx0Y2hlY2tDb2x1bW5zID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcblx0cmVhZG9ubHkgb3JkZXJBc2MgPSBPcmRlci5PcmRlckFzYztcclxuXHRyZWFkb25seSBvcmRlckRlc2MgPSBPcmRlci5PcmRlckRlc2M7XHJcblx0cmVhZG9ubHkgb3JkZXJOb25lID0gT3JkZXIuT3JkZXJOb25lO1xyXG5cdGNvbnN0cnVjdG9yKGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG5cdFx0Y29uc3QgaWNvbnMgPSBbXHJcblx0XHRcdCdhbGxfY2hvc2VuJyxcclxuXHRcdFx0J2NhbmNlbF9jaG9zZW4nLFxyXG5cdFx0XHQncmV0dXJuX2Nob3NlbicsXHJcblx0XHRcdCdzaW5nbGVfY2hvc2VuJyxcclxuXHRcdFx0J2RvdWJsZV9kb3duJyxcclxuXHRcdFx0J2RyYWdfaW5kaWNhdG9yJyxcclxuXHRcdFx0J2Fycm93X2NvbGxhcHNlJyxcclxuXHRcdFx0J2Fycm93X2V4cGFuZCcsXHJcblx0XHRcdCdzb3J0aW5nX2Fycm93cycsXHJcblx0XHRcdCdjb2xvcl9hZGQnLFxyXG5cdFx0XHQnZmlsZV9jb3B5JyxcclxuXHRcdFx0J2JnX2JvdHRvbV9vdXQnXHJcblx0XHRdO1xyXG5cdFx0aWNvbnMuZm9yRWFjaCh2ID0+IHtcclxuXHRcdFx0aWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb24oXHJcblx0XHRcdFx0dixcclxuXHRcdFx0XHRzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCdhc3NldHMvcmVjb3JkLXZpZXcvaWNvbi8nICsgdiArICcuc3ZnJylcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7fVxyXG5cdHByaXZhdGUgcmVmcmVzaENhblNlbGVjdENvbHVtbnMoKSB7XHJcblx0XHRpZiAodGhpcy5fYWxsQ29sdW1ucykge1xyXG5cdFx0XHR0aGlzLkNhblNlbGVjdENvbHVtbnMgPSBtYXAyV2l0aExldHRlcihcclxuXHRcdFx0XHR0aGlzLl9hbGxDb2x1bW5zLmZpbHRlcihcclxuXHRcdFx0XHRcdGNvbCA9PiAhdGhpcy5fc2VsZWN0ZWRDb2x1bW5zIHx8ICF0aGlzLl9zZWxlY3RlZENvbHVtbnMuZmluZChzZWwgPT4gc2VsLk5hbWUgPT09IGNvbClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgcmVmcmVzaFNlbGVjdGVkQ29sdW1ucyhjb2xzPzogSURpc3BsYXlDb2x1bW5bXSkge1xyXG5cdFx0dGhpcy5jaGVja0NvbHVtbnMuY2xlYXIoKTtcclxuXHRcdHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IGNvbHM7XHJcblx0XHR0aGlzLnJlZnJlc2hDYW5TZWxlY3RDb2x1bW5zKCk7XHJcblx0fVxyXG5cdGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xyXG5cdFx0aWYgKGV2ZW50LmNvbnRhaW5lciA9PT0gdGhpcy5yaWdodExpc3QpIHtcclxuXHRcdFx0Ly8g5Y+z6L655YaF6YOo56e75YqoXHJcblx0XHRcdGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcblx0XHRcdFx0bW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIOS7juW3pui+ueaLluWIsOWPs+i+uVxyXG5cdFx0XHRcdHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucyB8fCBbXTtcclxuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGV2ZW50LmN1cnJlbnRJbmRleCwgMCwge1xyXG5cdFx0XHRcdFx0TmFtZTogZXZlbnQuaXRlbS5kYXRhLFxyXG5cdFx0XHRcdFx0SGlkZGVuOiBmYWxzZSxcclxuXHRcdFx0XHRcdE9yZGVyOiBPcmRlci5PcmRlck5vbmVcclxuXHRcdFx0XHR9IGFzIElEaXNwbGF5Q29sdW1uKTtcclxuXHRcdFx0XHR0aGlzLnJlZnJlc2hDYW5TZWxlY3RDb2x1bW5zKCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgIT09IGV2ZW50LmNvbnRhaW5lcikge1xyXG5cdFx0XHQvLyDku47lj7Povrnmi5bliqjliLDlt6bovrlcclxuXHRcdFx0ZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YS5zcGxpY2UoZXZlbnQucHJldmlvdXNJbmRleCwgMSk7XHJcblx0XHRcdHRoaXMucmVmcmVzaENhblNlbGVjdENvbHVtbnMoKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZW1pdE1vZGlmeSgpO1xyXG5cdH1cclxuXHRjaGtTZWxlY3RDaGFuZ2UoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKSB7XHJcblx0XHRpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG5cdFx0XHR0aGlzLmNoZWNrQ29sdW1ucy5zZXQoZXZlbnQuc291cmNlLnZhbHVlLCB0cnVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY2hlY2tDb2x1bW5zLmRlbGV0ZShldmVudC5zb3VyY2UudmFsdWUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0b1JpZ2h0KGNvbE5hbWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zIHx8IFtdO1xyXG5cdFx0dGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goe1xyXG5cdFx0XHROYW1lOiBjb2xOYW1lLFxyXG5cdFx0XHRIaWRkZW46IGZhbHNlLFxyXG5cdFx0XHRPcmRlcjogT3JkZXIuT3JkZXJOb25lXHJcblx0XHR9IGFzIElEaXNwbGF5Q29sdW1uKTtcclxuXHRcdHRoaXMucmVmcmVzaENhblNlbGVjdENvbHVtbnMoKTtcclxuXHRcdHRoaXMuZW1pdE1vZGlmeSgpO1xyXG5cdH1cclxuXHR0b0xlZnQoaWR4OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5zcGxpY2UoaWR4LCAxKTtcclxuXHRcdHRoaXMucmVmcmVzaENhblNlbGVjdENvbHVtbnMoKTtcclxuXHRcdHRoaXMuZW1pdE1vZGlmeSgpO1xyXG5cdH1cclxuXHRjaGVja0FsbChldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcclxuXHRcdGlmIChldmVudC5jaGVja2VkKSB7XHJcblx0XHRcdHRoaXMuY2hlY2tDb2x1bW5zLmNsZWFyKCk7XHJcblx0XHRcdHRoaXMuQ2FuU2VsZWN0Q29sdW1ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGl0ZW0uQ29sdW1ucy5mb3JFYWNoKG5vZGUgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5jaGVja0NvbHVtbnMuc2V0KG5vZGUsIHRydWUpO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codGhpcy5jaGVja0NvbHVtbnMuZ2V0KG5vZGUpKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNoZWNrQ29sdW1ucy5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0b1JpZ2h0QWxsKCkge1xyXG5cdFx0dGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zIHx8IFtdO1xyXG5cdFx0dGhpcy5DYW5TZWxlY3RDb2x1bW5zLmZvckVhY2godiA9PiB7XHJcblx0XHRcdHYuQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2hlY2tDb2x1bW5zLmhhcyhjb2wpKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9zZWxlY3RlZENvbHVtbnMucHVzaCh7XHJcblx0XHRcdFx0XHRcdE5hbWU6IGNvbCxcclxuXHRcdFx0XHRcdFx0SGlkZGVuOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0T3JkZXI6IE9yZGVyLk9yZGVyTm9uZVxyXG5cdFx0XHRcdFx0fSBhcyBJRGlzcGxheUNvbHVtbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5yZWZyZXNoQ2FuU2VsZWN0Q29sdW1ucygpO1xyXG5cdFx0dGhpcy5lbWl0TW9kaWZ5KCk7XHJcblx0fVxyXG5cdGFjcm9ueW1GdW4obGV0dGVyOiBzdHJpbmcpIHtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgbGV0dGVyKS5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuXHR9XHJcblx0ZW1pdE1vZGlmeSgpIHtcclxuXHRcdHRoaXMuTW9kaWZ5RXZlbnQuZW1pdCh0aGlzLl9zZWxlY3RlZENvbHVtbnMpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gbWFwMldpdGhMZXR0ZXIodjogc3RyaW5nW10pIHtcclxuXHRjb25zdCBtYXBMaXN0ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xyXG5cdHYuZm9yRWFjaCh2diA9PiB7XHJcblx0XHRsZXQgaGVhZGVyTGV0dGVyID0gcGlueWluKHZ2LCB7IHN0eWxlOiBwaW55aW4uU1RZTEVfRklSU1RfTEVUVEVSIH0pLm1hcChzID0+IHNbMF0pWzBdO1xyXG5cdFx0aWYgKGhlYWRlckxldHRlci5sZW5ndGggPiAxKSB7XHJcblx0XHRcdGhlYWRlckxldHRlciA9IGhlYWRlckxldHRlclswXTtcclxuXHRcdH1cclxuXHRcdGlmIChtYXBMaXN0LmhhcyhoZWFkZXJMZXR0ZXIpKSB7XHJcblx0XHRcdG1hcExpc3QuZ2V0KGhlYWRlckxldHRlcikucHVzaCh2dik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYXBMaXN0LnNldChoZWFkZXJMZXR0ZXIsIFt2dl0pO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdC8vIOaOkuW6j1xyXG5cclxuXHRjb25zdCByZXYgPSBbXSBhcyBDb2x1bW5zV2l0aExldHRlcltdO1xyXG5cdG1hcExpc3QuZm9yRWFjaCgoY29sdW1ucywgbGV0dGVyKSA9PiB7XHJcblx0XHRyZXYucHVzaCh7IExldHRlcjogbGV0dGVyLCBDb2x1bW5zOiBjb2x1bW5zIH0gYXMgQ29sdW1uc1dpdGhMZXR0ZXIpO1xyXG5cdH0pO1xyXG5cdHJldHVybiByZXYuc29ydCgoYSwgYikgPT4gYS5MZXR0ZXIubG9jYWxlQ29tcGFyZShiLkxldHRlcikpO1xyXG59XHJcbiJdfQ==