stimulsoft-viewer-angular
Version:
Stimulsoft Viewer Angular
224 lines (220 loc) • 23.6 kB
JavaScript
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../services/model.service";
import * as i2 from "../services/mouse.service";
import * as i3 from "../menu/menu.service";
import * as i4 from "./button.component";
export class DropDownListComponent {
constructor(model, mouseService, menuService) {
this.model = model;
this.mouseService = mouseService;
this.menuService = menuService;
this.showImage = false;
this.action = new EventEmitter();
this.over = false;
this._readOnly = false;
this._enabled = true;
this.mouseService.getDocumentMouseUp().subscribe(() => {
this.hideListMenu();
});
}
ngOnInit() { }
set readOnly(value) {
this._readOnly = value;
setTimeout(() => {
try {
this.input.nativeElement.setAttribute('unselectable', value ? 'on' : 'off');
this.input.nativeElement.setAttribute('onselectstart', value ? 'return false' : '');
this.input.nativeElement.readOnly = value;
}
catch (e) { }
});
}
get readOnly() {
return this._readOnly;
}
get enabled() {
return this._enabled;
}
set enabled(value) {
if (!value) {
this.over = false;
}
this._enabled = value;
}
get key() {
return this._key;
}
set key(key) {
if (this.items != null) {
this.items.forEach(i => i.selected = i.key === key);
}
this._key = key;
}
get inputValue() {
if (this.items != null) {
return this.items.find(i => i.key === this._key)?.caption || '';
}
return '';
}
get selected() {
const vm = this.menuService.getVerticalMenu();
return vm?.state === 'expanded' && vm?.parent === this.element;
}
get className() {
return this.selected ? 'stiJsViewerDropDownListOver' : (this.enabled ? (this.over ? 'stiJsViewerDropDownListOver' : 'stiJsViewerDropDownList') : 'stiJsViewerDropDownListDisabled');
}
mouseover() {
if (!this.enabled) {
return;
}
this.over = true;
}
mouseout() {
if (!this.enabled) {
return;
}
this.over = false;
}
inputClick() {
if (this.readOnly) {
this.showListMenu();
}
}
showListMenu() {
this.menuService.addMenu({
type: this.menuService.VERTICAL_MENU_NAME, name: this.menuService.VERTICAL_MENU_NAME, items: [], parent: this.element,
verticalItems: this.items, itemStyleName: 'stiJsViewerMenuStandartItem', menuStyleName: 'stiJsViewerDropdownMenu',
action: this.action, width: this.element.nativeElement.offsetWidth,
state: ''
});
setTimeout(() => {
this.menuService.showMenu(this.menuService.VERTICAL_MENU_NAME);
});
}
hideListMenu() {
if (this.menuService.getVerticalMenu()) {
this.menuService.getVerticalMenu().state = 'initialDown';
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropDownListComponent, deps: [{ token: i1.ModelService }, { token: i2.MouseService }, { token: i3.MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DropDownListComponent, selector: "sti-drop-down-list", inputs: { toolTip: "toolTip", showImage: "showImage", width: "width", margin: "margin", items: "items", styleDisplay: "styleDisplay", verticalAlign: "verticalAlign", readOnly: "readOnly", enabled: "enabled", key: "key" }, outputs: { action: "action" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "element", first: true, predicate: ["element"], descendants: true }], ngImport: i0, template: `
<table #element [class]="className" cellpadding="0" cellspacing="0"
[style.fontFamily]="model.options.toolbar.fontFamily"
[style.color]="model.options.toolbar.fontColor"
[style.margin]="margin"
[style.verticalAlign]="verticalAlign"
[style.display]="styleDisplay"
[attr.title]="toolTip"
(mouseover)="mouseover()"
(mouseout)="mouseout()">
<tbody>
<tr class="stiJsViewerClearAllStyles">
<td class="stiJsViewerClearAllStyles">
<input #input
[style.width.px]="width - (model.options.isTouchDevice ? 23 : 15) - (showImage ? 38 : 0)"
[style.border]="0"
[style.cursor]="readOnly ? 'default' : 'text'"
[style.fontFamily]="model.options.toolbar.fontFamily"
[style.color]="model.options.toolbar.fontColor"
[style.height]="model.options.isTouchDevice ? '23px' : '18px'"
[style.lineHeight]="model.options.isTouchDevice ? '23px' : '18px'"
[style.visibility]="enabled ? 'visible' : 'hidden'"
[value]="inputValue"
(click)="inputClick()"
class="stiJsViewerDropDownList_TextBox">
</td>
<td class="stiJsViewerClearAllStyles">
<sti-button [imageName]="'Arrows.' + (model.options.isTouchDevice ? 'Big' : 'Small') + 'ArrowDown.png'"
[styleName]="'stiJsViewerDropDownListButton'"
[imageSizesWidth]="model.options.isTouchDevice ? 16 : 8"
[imageSizesHeight]="model.options.isTouchDevice ? 16 : 8"
[height]="model.options.isTouchDevice ? '26px' : '21px'"
[enabled]="enabled"
[selected]="selected"
[margin]="'0'"
(action)="showListMenu()">
</sti-button>
</td>
</tr>
</tbody>
</table>
`, isInline: true, dependencies: [{ kind: "component", type: i4.ButtonComponent, selector: "sti-button", inputs: ["caption", "caption2", "captionAlign", "captionPadding", "captionPaddingLeft", "captionWhiteSpace", "captionOverflow", "captionTextOverflow", "captionWidth", "captionMaxWidth", "captionLineHeight", "imageName", "arrow", "arrowMarginTop", "margin", "height", "selected", "minWidth", "innerTableWidth", "menuItems", "actionName", "tooltip", "imageCellTextAlign", "imageCellWidth", "imageCellPadding", "imageSizesWidth", "imageSizesHeight", "imageMargin", "width", "display", "closeButton", "resourceButton", "styleColors", "boxSizing", "navagationPanelTooltip", "cursor", "fontSize", "helpLink", "borderColor", "styleName", "enabled"], outputs: ["action", "closeButtonAction"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropDownListComponent, decorators: [{
type: Component,
args: [{
selector: 'sti-drop-down-list',
template: `
<table #element [class]="className" cellpadding="0" cellspacing="0"
[style.fontFamily]="model.options.toolbar.fontFamily"
[style.color]="model.options.toolbar.fontColor"
[style.margin]="margin"
[style.verticalAlign]="verticalAlign"
[style.display]="styleDisplay"
[attr.title]="toolTip"
(mouseover)="mouseover()"
(mouseout)="mouseout()">
<tbody>
<tr class="stiJsViewerClearAllStyles">
<td class="stiJsViewerClearAllStyles">
<input #input
[style.width.px]="width - (model.options.isTouchDevice ? 23 : 15) - (showImage ? 38 : 0)"
[style.border]="0"
[style.cursor]="readOnly ? 'default' : 'text'"
[style.fontFamily]="model.options.toolbar.fontFamily"
[style.color]="model.options.toolbar.fontColor"
[style.height]="model.options.isTouchDevice ? '23px' : '18px'"
[style.lineHeight]="model.options.isTouchDevice ? '23px' : '18px'"
[style.visibility]="enabled ? 'visible' : 'hidden'"
[value]="inputValue"
(click)="inputClick()"
class="stiJsViewerDropDownList_TextBox">
</td>
<td class="stiJsViewerClearAllStyles">
<sti-button [imageName]="'Arrows.' + (model.options.isTouchDevice ? 'Big' : 'Small') + 'ArrowDown.png'"
[styleName]="'stiJsViewerDropDownListButton'"
[imageSizesWidth]="model.options.isTouchDevice ? 16 : 8"
[imageSizesHeight]="model.options.isTouchDevice ? 16 : 8"
[height]="model.options.isTouchDevice ? '26px' : '21px'"
[enabled]="enabled"
[selected]="selected"
[margin]="'0'"
(action)="showListMenu()">
</sti-button>
</td>
</tr>
</tbody>
</table>
`
}]
}], ctorParameters: () => [{ type: i1.ModelService }, { type: i2.MouseService }, { type: i3.MenuService }], propDecorators: { input: [{
type: ViewChild,
args: ['input']
}], element: [{
type: ViewChild,
args: ['element']
}], toolTip: [{
type: Input
}], showImage: [{
type: Input
}], width: [{
type: Input
}], margin: [{
type: Input
}], items: [{
type: Input
}], styleDisplay: [{
type: Input
}], verticalAlign: [{
type: Input
}], action: [{
type: Output
}], readOnly: [{
type: Input
}], enabled: [{
type: Input
}], key: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RpbXVsc29mdC12aWV3ZXItYW5ndWxhci9zcmMvbGliL2NvbnRyb2xzL2Ryb3AtZG93bi1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBc0R0RyxNQUFNLE9BQU8scUJBQXFCO0lBb0JoQyxZQUFtQixLQUFtQixFQUFTLFlBQTBCLEVBQVMsV0FBd0I7UUFBdkYsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFkakcsY0FBUyxHQUFHLEtBQUssQ0FBQztRQU9qQixXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNMLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUl0QixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxLQUFLLENBQUM7SUFFZCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxD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QU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBMEJNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFXTyxHQUFHO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi9zZXJ2aWNlcy9vYmplY3RzJztcclxuaW1wb3J0IHsgTW91c2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW91c2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vbWVudS9tZW51LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzdGktZHJvcC1kb3duLWxpc3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPHRhYmxlICNlbGVtZW50IFtjbGFzc109XCJjbGFzc05hbWVcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250RmFtaWx5XT1cIm1vZGVsLm9wdGlvbnMudG9vbGJhci5mb250RmFtaWx5XCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwibW9kZWwub3B0aW9ucy50b29sYmFyLmZvbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbl09XCJtYXJnaW5cIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS52ZXJ0aWNhbEFsaWduXT1cInZlcnRpY2FsQWxpZ25cIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInN0eWxlRGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwidG9vbFRpcFwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlb3V0KT1cIm1vdXNlb3V0KClcIj5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwic3RpSnNWaWV3ZXJDbGVhckFsbFN0eWxlc1wiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInN0aUpzVmlld2VyQ2xlYXJBbGxTdHlsZXNcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAjaW5wdXRcclxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCAtIChtb2RlbC5vcHRpb25zLmlzVG91Y2hEZXZpY2UgPyAyMyA6IDE1KSAtIChzaG93SW1hZ2UgPyAzOCA6IDApXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cInJlYWRPbmx5ID8gJ2RlZmF1bHQnIDogJ3RleHQnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250RmFtaWx5XT1cIm1vZGVsLm9wdGlvbnMudG9vbGJhci5mb250RmFtaWx5XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJtb2RlbC5vcHRpb25zLnRvb2xiYXIuZm9udENvbG9yXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwibW9kZWwub3B0aW9ucy5pc1RvdWNoRGV2aWNlID8gJzIzcHgnIDogJzE4cHgnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5saW5lSGVpZ2h0XT1cIm1vZGVsLm9wdGlvbnMuaXNUb3VjaERldmljZSA/ICcyM3B4JyA6ICcxOHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJlbmFibGVkID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0Q2xpY2soKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0aUpzVmlld2VyRHJvcERvd25MaXN0X1RleHRCb3hcIj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzdGlKc1ZpZXdlckNsZWFyQWxsU3R5bGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdGktYnV0dG9uIFtpbWFnZU5hbWVdPVwiJ0Fycm93cy4nICsgKG1vZGVsLm9wdGlvbnMuaXNUb3VjaERldmljZSA/ICdCaWcnIDogJ1NtYWxsJykgKyAnQXJyb3dEb3duLnBuZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3R5bGVOYW1lXT1cIidzdGlKc1ZpZXdlckRyb3BEb3duTGlzdEJ1dHRvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW1hZ2VTaXplc1dpZHRoXT1cIm1vZGVsLm9wdGlvbnMuaXNUb3VjaERldmljZSA/IDE2IDogOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbWFnZVNpemVzSGVpZ2h0XT1cIm1vZGVsLm9wdGlvbnMuaXNUb3VjaERldmljZSA/IDE2IDogOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwibW9kZWwub3B0aW9ucy5pc1RvdWNoRGV2aWNlID8gJzI2cHgnIDogJzIxcHgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZWRdPVwiZW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFttYXJnaW5dPVwiJzAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGFjdGlvbik9XCJzaG93TGlzdE1lbnUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3N0aS1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgYFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERyb3BEb3duTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZWxlbWVudCcpIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIHRvb2xUaXA6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SW1hZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG1hcmdpbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBJdGVtW107XHJcbiAgQElucHV0KCkgc3R5bGVEaXNwbGF5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmVydGljYWxBbGlnbjogc3RyaW5nO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgb3ZlciA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlYWRPbmx5ID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZW5hYmxlZCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfa2V5OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RlbDogTW9kZWxTZXJ2aWNlLCBwdWJsaWMgbW91c2VTZXJ2aWNlOiBNb3VzZVNlcnZpY2UsIHB1YmxpYyBtZW51U2VydmljZTogTWVudVNlcnZpY2UpIHtcclxuICAgIHRoaXMubW91c2VTZXJ2aWNlLmdldERvY3VtZW50TW91c2VVcCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaGlkZUxpc3RNZW51KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkgeyB9XHJcblxyXG4gIHNldCByZWFkT25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVhZE9ubHkgPSB2YWx1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Vuc2VsZWN0YWJsZScsIHZhbHVlID8gJ29uJyA6ICdvZmYnKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdvbnNlbGVjdHN0YXJ0JywgdmFsdWUgPyAncmV0dXJuIGZhbHNlJyA6ICcnKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkgPSB2YWx1ZTtcclxuICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWFkT25seTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB0aGlzLm92ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGdldCBrZXkoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9rZXk7XHJcbiAgfVxyXG5cclxuICBzZXQga2V5KGtleTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpID0+IGkuc2VsZWN0ZWQgPSBpLmtleSA9PT0ga2V5KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2tleSA9IGtleTtcclxuICB9XHJcblxyXG4gIGdldCBpbnB1dFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLmtleSA9PT0gdGhpcy5fa2V5KT8uY2FwdGlvbiB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZtID0gdGhpcy5tZW51U2VydmljZS5nZXRWZXJ0aWNhbE1lbnUoKTtcclxuICAgIHJldHVybiB2bT8uc3RhdGUgPT09ICdleHBhbmRlZCcgJiYgdm0/LnBhcmVudCA9PT0gdGhpcy5lbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNsYXNzTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQgPyAnc3RpSnNWaWV3ZXJEcm9wRG93bkxpc3RPdmVyJyA6ICh0aGlzLmVuYWJsZWQgPyAodGhpcy5vdmVyID8gJ3N0aUpzVmlld2VyRHJvcERvd25MaXN0T3ZlcicgOiAnc3RpSnNWaWV3ZXJEcm9wRG93bkxpc3QnKSA6ICdzdGlKc1ZpZXdlckRyb3BEb3duTGlzdERpc2FibGVkJyk7XHJcbiAgfVxyXG5cclxuICBtb3VzZW92ZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm92ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbW91c2VvdXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm92ZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlucHV0Q2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xyXG4gICAgICB0aGlzLnNob3dMaXN0TWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0xpc3RNZW51KCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5hZGRNZW51KHtcclxuICAgICAgdHlwZTogdGhpcy5tZW51U2VydmljZS5WRVJUSUNBTF9NRU5VX05BTUUsIG5hbWU6IHRoaXMubWVudVNlcnZpY2UuVkVSVElDQUxfTUVOVV9OQU1FLCBpdGVtczogW10sIHBhcmVudDogdGhpcy5lbGVtZW50LFxyXG4gICAgICB2ZXJ0aWNhbEl0ZW1zOiB0aGlzLml0ZW1zLCBpdGVtU3R5bGVOYW1lOiAnc3RpSnNWaWV3ZXJNZW51U3RhbmRhcnRJdGVtJywgbWVudVN0eWxlTmFtZTogJ3N0aUpzVmlld2VyRHJvcGRvd25NZW51JyxcclxuICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbiwgd2lkdGg6IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICBzdGF0ZTogJydcclxuICAgIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNob3dNZW51KHRoaXMubWVudVNlcnZpY2UuVkVSVElDQUxfTUVOVV9OQU1FKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGlkZUxpc3RNZW51KCkge1xyXG4gICAgaWYgKHRoaXMubWVudVNlcnZpY2UuZ2V0VmVydGljYWxNZW51KCkpIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5nZXRWZXJ0aWNhbE1lbnUoKS5zdGF0ZSA9ICdpbml0aWFsRG93bic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=