dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
220 lines • 28.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, Inject, ViewChild, ElementRef } from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { NodeTypeEnum } from '../../../services/eleview/types/model';
import { LabelManagerService } from '../service/label-manager.service';
import { EditLabelService } from './edit-label.service';
import { LabelHistoryComponent } from './label-history/label-history.component';
import ace from 'ace-builds';
import { ThemeService } from '../../../services/theme.service';
export class EditLabelComponent {
/**
* @param {?} theme
* @param {?} dialog
* @param {?} lblSvr
* @param {?} dialogRef
* @param {?} svr
*/
constructor(theme, dialog, lblSvr, dialogRef, svr) {
this.theme = theme;
this.dialog = dialog;
this.lblSvr = lblSvr;
this.dialogRef = dialogRef;
this.svr = svr;
this.hostClass = true;
this.nodeTypeCondition = NodeTypeEnum.NodeCondition;
this.nodeTypeAnd = NodeTypeEnum.NodeAnd;
this.nodeTypeOr = NodeTypeEnum.NodeOr;
this.nodeTypeUnknow = NodeTypeEnum.unknow;
this.nodeTypePlain = NodeTypeEnum.NodePlain;
this.AdditionalSQL = true;
this.AdditionalSQLDisplay = true;
this.options = { maxLines: 12, printMargin: false };
this.theme.theme.subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.themeModel = v.model;
}));
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.labelNode.nativeElement.ondragover = (/**
* @param {?} event
* @return {?}
*/
(event) => {
// 把labelNode变成一个容器,能拖入条件
event.preventDefault();
// console.log(event);
event.stopPropagation();
});
}
/**
* @return {?}
*/
ngOnInit() {
ace.config.set('basePath', '/front/assets/ace-builds/src-min-noconflict');
this.lblSvr.onNodeChange.subscribe((/**
* @return {?}
*/
() => {
if (this.svr.editLabel.Conts && this.svr.editLabel.Conts.NodeType !== NodeTypeEnum.unknow) {
this.svr.backface
.nodeToString(this.svr.editLabel.Conts.toInterface())
.subscribe((/**
* @param {?} str
* @return {?}
*/
str => (this.whereString = str)));
}
else {
this.whereString = '';
}
}));
this.lblSvr.onNodeChange.emit();
this.标签定义.nativeElement.parentElement.parentElement.style = 'padding:0px;';
}
/**
* @param {?} event
* @return {?}
*/
labelDrop(event) {
if (this.svr.editLabel.Conts.NodeType === this.nodeTypeUnknow) {
this.svr.editLabel.Conts.assign(this.lblSvr.buildDragedNode());
this.lblSvr.onNodeChange.emit();
}
else if (this.svr.editLabel.Conts.NodeType === this.nodeTypeAnd ||
this.svr.editLabel.Conts.NodeType === this.nodeTypeOr) {
this.svr.editLabel.Conts.Children[this.svr.editLabel.Conts.Children.length - 1].addBottomSibling(this.lblSvr.buildDragedNode());
if (this.lblSvr.dragData.Type === 'node') {
((/** @type {?} */ (this.lblSvr.dragData.Data))).remove();
}
this.lblSvr.onNodeChange.emit();
}
else if (this.svr.editLabel.Conts.NodeType === this.nodeTypeCondition ||
this.svr.editLabel.Conts.NodeType === this.nodeTypePlain) {
this.svr.editLabel.Conts.addChildSibling(this.lblSvr.buildDragedNode());
if (this.lblSvr.dragData.Type === 'node') {
((/** @type {?} */ (this.lblSvr.dragData.Data))).remove();
}
this.lblSvr.onNodeChange.emit();
}
event.stopPropagation();
}
/**
* @param {?} event
* @param {?} column
* @return {?}
*/
colDragStart(event, column) {
this.lblSvr.dragData = { Type: 'column', Data: column };
}
/**
* @return {?}
*/
openHis() {
this.dialog.open(LabelHistoryComponent, {
width: '296px',
height: '384px',
data: (/** @type {?} */ ({
svr: this.svr,
data: { CategoryID: this.svr.editLabel.CategoryID, ID: this.svr.editLabel.LabelID }
})),
autoFocus: false
});
}
/**
* @param {?} letter
* @return {?}
*/
acronymScroll(letter) {
document.querySelector('#' + letter).scrollIntoView(true);
}
/**
* @return {?}
*/
save() {
this.svr.editLabel.save().subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
if (v) {
this.dialogRef.close();
}
}));
}
}
EditLabelComponent.decorators = [
{ type: Component, args: [{
selector: 'common-edit-label',
template: "<div #\u6807\u7B7E\u5B9A\u4E49 class=\"\u6807\u7B7E\u5B9A\u4E49\u5185\u5BB9\" cdkDropListGroup>\r\n\t<div class=\"\u6807\u7B7E\u5B9A\u4E49\u5DE6\">\r\n\t\t<div *ngIf=\"!svr.editLabel.titleInput\" class=\"\u6807\u7B7E\u540D\u79F0\" [matTooltip]=\"svr.editLabel.Name\">\r\n\t\t\t{{ svr.editLabel.Name }}\r\n\t\t</div>\r\n\t\t<mat-form-field *ngIf=\"svr.editLabel.titleInput\" class=\"\u540D\u79F0\u7F16\u8F91\">\r\n\t\t\t<input type=\"text\" matInput [(ngModel)]=\"svr.editLabel.title\" />\r\n\t\t</mat-form-field>\r\n\t\t<div class=\"\u6307\u6807\u529F\u80FD\u56FE\u6807\">\r\n\t\t\t<mat-icon *ngIf=\"svr.editLabel.titleInput\" (click)=\"svr.editLabel.editCancel()\" class=\"edit-cancel close\"\r\n\t\t\t\tsvgIcon=\"close\"></mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"svr.editLabel.titleInput\" (click)=\"svr.editLabel.done()\" class=\"done\" svgIcon=\"done\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"!svr.editLabel.titleInput\" (click)=\"svr.editLabel.edit()\" class=\"edit\" svgIcon=\"edit\">\r\n\t\t\t</mat-icon>\r\n\t\t\t<mat-icon svgIcon=\"alarm_on\" (click)=\"openHis()\"></mat-icon>\r\n\t\t</div>\r\n\t\t<div class=\"left-columns\">\r\n\t\t\t<div class=\"column-list\">\r\n\t\t\t\t<div *ngFor=\"let list of svr.allColumnsWithLetter\">\r\n\t\t\t\t\t<div class=\"letter-color \u6307\u6807\u9996\u5B57\u6BCD\" id=\"{{ list.Letter }}\">\r\n\t\t\t\t\t\t{{ list.Letter | uppercase }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div mat-button class=\"\u6307\u6807\" (dragstart)=\"colDragStart($event, column)\"\r\n\t\t\t\t\t\t*ngFor=\"let column of list.Columns\" [draggable]=\"true\">\r\n\t\t\t\t\t\t{{ column }}\r\n\t\t\t\t\t\t<mat-icon class=\"\u62D6\u52A8\" svgIcon=\"drag_indicator\" [cdkDragHandle]=\"true\"> </mat-icon>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"letter-list\">\r\n\t\t\t\t<div *ngFor=\"let list of svr.allColumnsWithLetter\">\r\n\t\t\t\t\t<div class=\"letter-color \u5C45\u4E2D\" (click)=\"acronymScroll(list.Letter)\">\r\n\t\t\t\t\t\t{{ list.Letter | uppercase }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"\u6807\u7B7E\u5B9A\u4E49\u53F3\">\r\n\t\t<div #labelNode class=\"node-content\" (drop)=\"labelDrop($event)\" onselectstart=\"return false;\">\r\n\t\t\t<common-node class=\"node\" [data]=\"svr.editLabel.Conts\"\r\n\t\t\t\t[ngClass]=\"{ empty: svr.editLabel.Conts.NodeType === '' }\">\r\n\t\t\t</common-node>\r\n\t\t</div>\r\n\t\t<div class=\"\u9644\u52A0\u529F\u80FD\">\r\n\t\t\t<div class=\"\u9644\u52A0\u529F\u80FD\u5BFC\u822A\">\r\n\t\t\t\t<span [class.\u9009\u4E2D\u7684\u9644\u52A0\u5BFC\u822A]=\"AdditionalSQL\" (click)=\"AdditionalSQL = true\">SQL\u4EE3\u7801\u663E\u793A</span><span\r\n\t\t\t\t\t[class.\u9009\u4E2D\u7684\u9644\u52A0\u5BFC\u822A]=\"!AdditionalSQL\" (click)=\"AdditionalSQL = false\">\u9644\u52A0\u9AD8\u7EA7\u6761\u4EF6</span>\r\n\t\t\t\t<mat-icon (click)=\"AdditionalSQLDisplay = !AdditionalSQLDisplay\"\r\n\t\t\t\t\tsvgIcon=\"{{ AdditionalSQLDisplay ? 'expand_more' : 'expand_less' }}\">\r\n\t\t\t\t</mat-icon>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"AdditionalSQLDisplay\" class=\"\u9644\u52A0\u529F\u80FD\u5185\u5BB9\">\r\n\t\t\t\t<div ace-editor class=\"where-string\" *ngIf=\"AdditionalSQL\" [readOnly]=\"true\" [text]=\"whereString\" mode=\"text\"\r\n\t\t\t\t\t[theme]=\"themeModel === 'dark' ? 'tomorrow_night' : 'eclipse'\" [options]=\"options\" [autoUpdateContent]=\"true\"\r\n\t\t\t\t\t[durationBeforeCallback]=\"1000\" style=\"min-height: 172px; width:100%; overflow: auto;\">\r\n\t\t\t\t</div>\r\n\t\t\t\t<div ace-editor class=\"where-string\" *ngIf=\"!AdditionalSQL\" [text]=\"svr.editLabel.PlainText\" mode=\"text\"\r\n\t\t\t\t\t[theme]=\"themeModel === 'dark' ? 'tomorrow_night' : 'eclipse'\" [options]=\"options\" [autoUpdateContent]=\"true\"\r\n\t\t\t\t\t[durationBeforeCallback]=\"1000\" style=\"min-height: 172px; width:100%; overflow: auto;\">\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<div class=\"\u6807\u7B7E\u5B9A\u4E49\u5E95\u90E8\">\r\n\t<button mat-button (click)=\"dialogRef.close()\">\u53D6\u6D88</button>\r\n\t<button mat-button class=\"\u786E\u5B9A\" (click)=\"save()\">\u786E\u5B9A</button>\r\n</div>",
providers: [EditLabelService],
styles: ["@charset \"UTF-8\";:host{width:800px;height:100%;padding:0;display:flex;box-sizing:border-box;flex-direction:column}.\u6807\u7B7E\u5B9A\u4E49\u5185\u5BB9{height:calc(100% - 40px);width:100%;flex-grow:1;display:flex}.\u6807\u7B7E\u5B9A\u4E49\u5DE6{width:232px;height:100%;box-sizing:border-box;position:relative}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u6807\u7B7E\u540D\u79F0{padding-left:16px;font-weight:700;width:110px;height:24px;margin:9px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u540D\u79F0\u7F16\u8F91{padding-left:16px;font-weight:700;width:110px;height:40px}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u540D\u79F0\u7F16\u8F91 ::ng-deep .mat-form-field-wrapper{padding:0 0 12px}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u540D\u79F0\u7F16\u8F91 ::ng-deep .mat-form-field-infix{border:0;padding:12px 0}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u6307\u6807\u529F\u80FD\u56FE\u6807{height:24px;position:absolute;right:8px;top:12px}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .\u6307\u6807\u529F\u80FD\u56FE\u6807 .mat-icon{width:24px;height:24px;margin-right:4px;vertical-align:middle;cursor:pointer}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns{width:100%;height:calc(100% - 60px);position:relative}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .column-list{width:100%;height:100%;box-sizing:border-box;overflow-y:auto}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .letter-list{height:100%;position:absolute;top:0;right:0;overflow-y:auto}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .letter-color{width:20px;font-size:12px;text-align:center}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u6307\u6807{width:calc(100% - 20px);height:32px;line-height:32px;padding:0 24px;font-size:14px;box-sizing:border-box;text-align:left;position:relative}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u6307\u6807 .\u62D6\u52A8{width:16px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u6307\u6807:hover{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)}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u6307\u6807:hover .\u62D6\u52A8{display:block}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u6307\u6807\u9996\u5B57\u6BCD{margin:8px 8px 4px}.\u6807\u7B7E\u5B9A\u4E49\u5DE6 .left-columns .\u5C45\u4E2D{text-align:center;cursor:pointer}.\u6807\u7B7E\u5B9A\u4E49\u5E95\u90E8{width:100%;height:40px;line-height:40px;text-align:right;position:relative}.\u6807\u7B7E\u5B9A\u4E49\u5E95\u90E8 button{margin-right:16px}.\u6807\u7B7E\u5B9A\u4E49\u53F3{width:0;flex-grow:1;height:100%;display:flex;flex-direction:column}.node-content{width:100%;height:0;flex-grow:1;padding:16px 16px 0;box-sizing:border-box}.node-content .node{width:100%;height:100%;overflow-x:auto;overflow-y:auto;display:block}.node-drag{display:flex;width:104px;height:36px;border-radius:4px;font-size:14px;color:#2679a0;background:#7fc3e2;align-items:center;justify-content:center}.empty{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.\u9644\u52A0\u529F\u80FD{width:100%}.\u9644\u52A0\u529F\u80FD .\u9644\u52A0\u529F\u80FD\u5BFC\u822A{width:100%;height:32px;font-size:14px;line-height:32px}.\u9644\u52A0\u529F\u80FD .\u9644\u52A0\u529F\u80FD\u5BFC\u822A span{line-height:32px;margin:0 12px 0 4px;cursor:pointer}.\u9644\u52A0\u529F\u80FD .\u9644\u52A0\u529F\u80FD\u5BFC\u822A .mat-icon{float:right;margin:4px;cursor:pointer}.\u9644\u52A0\u529F\u80FD .\u9644\u52A0\u529F\u80FD\u5185\u5BB9{width:100%;height:204px;padding:16px 8px;box-sizing:border-box}.where-string{border-radius:4px}"]
}] }
];
/** @nocollapse */
EditLabelComponent.ctorParameters = () => [
{ type: ThemeService },
{ type: MatDialog },
{ type: EditLabelService },
{ type: MatDialogRef },
{ type: LabelManagerService, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
];
EditLabelComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.edit-label',] }],
标签定义: [{ type: ViewChild, args: ['标签定义', { static: true },] }],
labelNode: [{ type: ViewChild, args: ['labelNode', { static: false },] }]
};
if (false) {
/** @type {?} */
EditLabelComponent.prototype.hostClass;
/** @type {?} */
EditLabelComponent.prototype.nodeTypeCondition;
/** @type {?} */
EditLabelComponent.prototype.nodeTypeAnd;
/** @type {?} */
EditLabelComponent.prototype.nodeTypeOr;
/** @type {?} */
EditLabelComponent.prototype.nodeTypeUnknow;
/** @type {?} */
EditLabelComponent.prototype.nodeTypePlain;
/** @type {?} */
EditLabelComponent.prototype.AdditionalSQL;
/** @type {?} */
EditLabelComponent.prototype.AdditionalSQLDisplay;
/** @type {?} */
EditLabelComponent.prototype.whereString;
/** @type {?} */
EditLabelComponent.prototype.options;
/** @type {?} */
EditLabelComponent.prototype.themeModel;
/** @type {?} */
EditLabelComponent.prototype.标签定义;
/** @type {?} */
EditLabelComponent.prototype.labelNode;
/**
* @type {?}
* @private
*/
EditLabelComponent.prototype.theme;
/** @type {?} */
EditLabelComponent.prototype.dialog;
/**
* @type {?}
* @private
*/
EditLabelComponent.prototype.lblSvr;
/** @type {?} */
EditLabelComponent.prototype.dialogRef;
/** @type {?} */
EditLabelComponent.prototype.svr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9sYWJlbC1tYW5hZ2VyL2VkaXQtbGFiZWwvZWRpdC1sYWJlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUEwQixNQUFNLHlDQUF5QyxDQUFDO0FBQ3hHLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFRM0UsTUFBTSxPQUFPLGtCQUFrQjs7Ozs7Ozs7SUFpQjlCLFlBQ1MsS0FBbUIsRUFDcEIsTUFBaUIsRUFDaEIsTUFBd0IsRUFDekIsU0FBMkMsRUFDbEIsR0FBd0I7UUFKaEQsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQWtDO1FBQ2xCLFFBQUcsR0FBSCxHQUFHLENBQXFCO1FBckJ4QixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxZQUFZLENB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QUUsS0FBSyxFQUFFOzs7O0lBYnpDLHVDQUFrRDs7SUFDbEQsK0NBQXdEOztJQUN4RCx5Q0FBNEM7O0lBQzVDLHdDQUEwQzs7SUFDMUMsNENBQThDOztJQUM5QywyQ0FBZ0Q7O0lBQ2hELDJDQUFxQjs7SUFDckIsa0RBQTRCOztJQUM1Qix5Q0FBb0I7O0lBQ3BCLHFDQUFvRDs7SUFDcEQsd0NBQXVCOztJQUN2QixrQ0FDaUI7O0lBQ2pCLHVDQUNzQjs7Ozs7SUFHckIsbUNBQTJCOztJQUMzQixvQ0FBd0I7Ozs7O0lBQ3hCLG9DQUFnQzs7SUFDaEMsdUNBQWtEOztJQUNsRCxpQ0FBd0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBPbkluaXQsIEluamVjdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IE5vZGVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbW9kZWwnO1xyXG5pbXBvcnQgeyBMYWJlbE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9sYWJlbC1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9ub2RlJztcclxuaW1wb3J0IHsgRWRpdExhYmVsU2VydmljZSB9IGZyb20gJy4vZWRpdC1sYWJlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGFiZWxIaXN0b3J5Q29tcG9uZW50LCBMYWJlbEhpc3RvcnlEaWFsb2dEYXRhIH0gZnJvbSAnLi9sYWJlbC1oaXN0b3J5L2xhYmVsLWhpc3RvcnkuY29tcG9uZW50JztcclxuaW1wb3J0IGFjZSBmcm9tICdhY2UtYnVpbGRzJztcclxuaW1wb3J0IHsgVGhlbWVNb2RlbCwgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi1lZGl0LWxhYmVsJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vZWRpdC1sYWJlbC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vZWRpdC1sYWJlbC5jb21wb25lbnQuc2NzcyddLFxyXG5cdHByb3ZpZGVyczogW0VkaXRMYWJlbFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0TGFiZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cdEBIb3N0QmluZGluZygnY2xhc3MuZWRpdC1sYWJlbCcpIGhvc3RDbGFzcyA9IHRydWU7XHJcblx0cmVhZG9ubHkgbm9kZVR5cGVDb25kaXRpb24gPSBOb2RlVHlwZUVudW0uTm9kZUNvbmRpdGlvbjtcclxuXHRyZWFkb25seSBub2RlVHlwZUFuZCA9IE5vZGVUeXBlRW51bS5Ob2RlQW5kO1xyXG5cdHJlYWRvbmx5IG5vZGVUeXBlT3IgPSBOb2RlVHlwZUVudW0uTm9kZU9yO1xyXG5cdHJlYWRvbmx5IG5vZGVUeXBlVW5rbm93ID0gTm9kZVR5cGVFbnVtLnVua25vdztcclxuXHRyZWFkb25seSBub2RlVHlwZVBsYWluID0gTm9kZVR5cGVFbnVtLk5vZGVQbGFpbjtcclxuXHRBZGRpdGlvbmFsU1FMID0gdHJ1ZTtcclxuXHRBZGRpdGlvbmFsU1FMRGlzcGxheSA9IHRydWU7XHJcblx0d2hlcmVTdHJpbmc6IHN0cmluZztcclxuXHRvcHRpb25zOiBhbnkgPSB7IG1heExpbmVzOiAxMiwgcHJpbnRNYXJnaW46IGZhbHNlIH07XHJcblx0dGhlbWVNb2RlbDogVGhlbWVNb2RlbDtcclxuXHRAVmlld0NoaWxkKCfmoIfnrb7lrprkuYknLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdOagh+etvuWumuS5iTogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKCdsYWJlbE5vZGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRsYWJlbE5vZGU6IEVsZW1lbnRSZWY7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB0aGVtZTogVGhlbWVTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG5cdFx0cHJpdmF0ZSBsYmxTdnI6IEVkaXRMYWJlbFNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdExhYmVsQ29tcG9uZW50PixcclxuXHRcdEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgc3ZyOiBMYWJlbE1hbmFnZXJTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLnRoZW1lLnRoZW1lLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0dGhpcy50aGVtZU1vZGVsID0gdi5tb2RlbDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XHJcblx0XHR0aGlzLmxhYmVsTm9kZS5uYXRpdmVFbGVtZW50Lm9uZHJhZ292ZXIgPSAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xyXG5cdFx0XHQvLyDmiopsYWJlbE5vZGXlj5jmiJDkuIDkuKrlrrnlmags6IO95ouW5YWl5p2h5Lu2XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdGFjZS5jb25maWcuc2V0KCdiYXNlUGF0aCcsICcvZnJvbnQvYXNzZXRzL2FjZS1idWlsZHMvc3JjLW1pbi1ub2NvbmZsaWN0Jyk7XHJcblx0XHR0aGlzLmxibFN2ci5vbk5vZGVDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cyAmJiB0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMuTm9kZVR5cGUgIT09IE5vZGVUeXBlRW51bS51bmtub3cpIHtcclxuXHRcdFx0XHR0aGlzLnN2ci5iYWNrZmFjZVxyXG5cdFx0XHRcdFx0Lm5vZGVUb1N0cmluZyh0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMudG9JbnRlcmZhY2UoKSlcclxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoc3RyID0+ICh0aGlzLndoZXJlU3RyaW5nID0gc3RyKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy53aGVyZVN0cmluZyA9ICcnO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubGJsU3ZyLm9uTm9kZUNoYW5nZS5lbWl0KCk7XHJcblx0XHR0aGlzLuagh+etvuWumuS5iS5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5zdHlsZSA9ICdwYWRkaW5nOjBweDsnO1xyXG5cdH1cclxuXHRsYWJlbERyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xyXG5cdFx0aWYgKHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cy5Ob2RlVHlwZSA9PT0gdGhpcy5ub2RlVHlwZVVua25vdykge1xyXG5cdFx0XHR0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMuYXNzaWduKHRoaXMubGJsU3ZyLmJ1aWxkRHJhZ2VkTm9kZSgpKTtcclxuXHRcdFx0dGhpcy5sYmxTdnIub25Ob2RlQ2hhbmdlLmVtaXQoKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cy5Ob2RlVHlwZSA9PT0gdGhpcy5ub2RlVHlwZUFuZCB8fFxyXG5cdFx0XHR0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMuTm9kZVR5cGUgPT09IHRoaXMubm9kZVR5cGVPclxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cy5DaGlsZHJlblt0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMuQ2hpbGRyZW4ubGVuZ3RoIC0gMV0uYWRkQm90dG9tU2libGluZyhcclxuXHRcdFx0XHR0aGlzLmxibFN2ci5idWlsZERyYWdlZE5vZGUoKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAodGhpcy5sYmxTdnIuZHJhZ0RhdGEuVHlwZSA9PT0gJ25vZGUnKSB7XHJcblx0XHRcdFx0KHRoaXMubGJsU3ZyLmRyYWdEYXRhLkRhdGEgYXMgTm9kZSkucmVtb3ZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5sYmxTdnIub25Ob2RlQ2hhbmdlLmVtaXQoKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cy5Ob2RlVHlwZSA9PT0gdGhpcy5ub2RlVHlwZUNvbmRpdGlvbiB8fFxyXG5cdFx0XHR0aGlzLnN2ci5lZGl0TGFiZWwuQ29udHMuTm9kZVR5cGUgPT09IHRoaXMubm9kZVR5cGVQbGFpblxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuc3ZyLmVkaXRMYWJlbC5Db250cy5hZGRDaGlsZFNpYmxpbmcodGhpcy5sYmxTdnIuYnVpbGREcmFnZWROb2RlKCkpO1xyXG5cdFx0XHRpZiAodGhpcy5sYmxTdnIuZHJhZ0RhdGEuVHlwZSA9PT0gJ25vZGUnKSB7XHJcblx0XHRcdFx0KHRoaXMubGJsU3ZyLmRyYWdEYXRhLkRhdGEgYXMgTm9kZSkucmVtb3ZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5sYmxTdnIub25Ob2RlQ2hhbmdlLmVtaXQoKTtcclxuXHRcdH1cclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdH1cclxuXHRjb2xEcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgY29sdW1uOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubGJsU3ZyLmRyYWdEYXRhID0geyBUeXBlOiAnY29sdW1uJywgRGF0YTogY29sdW1uIH07XHJcblx0fVxyXG5cdG9wZW5IaXMoKSB7XHJcblx0XHR0aGlzLmRpYWxvZy5vcGVuKExhYmVsSGlzdG9yeUNvbXBvbmVudCwge1xyXG5cdFx0XHR3aWR0aDogJzI5NnB4JyxcclxuXHRcdFx0aGVpZ2h0OiAnMzg0cHgnLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0c3ZyOiB0aGlzLnN2cixcclxuXHRcdFx0XHRkYXRhOiB7IENhdGVnb3J5SUQ6IHRoaXMuc3ZyLmVkaXRMYWJlbC5DYXRlZ29yeUlELCBJRDogdGhpcy5zdnIuZWRpdExhYmVsLkxhYmVsSUQgfVxyXG5cdFx0XHR9IGFzIExhYmVsSGlzdG9yeURpYWxvZ0RhdGEsXHJcblx0XHRcdGF1dG9Gb2N1czogZmFsc2VcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRhY3JvbnltU2Nyb2xsKGxldHRlcjogc3RyaW5nKSB7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIGxldHRlcikuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XHJcblx0fVxyXG5cdHNhdmUoKSB7XHJcblx0XHR0aGlzLnN2ci5lZGl0TGFiZWwuc2F2ZSgpLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHR0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19