stimulsoft-forms
Version:
Stimulsoft PDF Forms
187 lines • 25.8 kB
JavaScript
import { Component, Input } from "@angular/core";
import StiRectangleGeometryLayout from "../../../../computed/StiRectangleGeometryLayout";
import * as i0 from "@angular/core";
import * as i1 from "../../../../services/model.service";
import * as i2 from "../../../../services/sti-helper.service";
import * as i3 from "../../../../services/mouse.service";
import * as i4 from "@angular/common";
export class StiComponentHeightEditorComponent {
constructor(model, helper, render, mouseService) {
this.model = model;
this.helper = helper;
this.render = render;
this.mouseService = mouseService;
this.buttonDown = 0;
this.mouseOver = false;
this.focused = false;
}
ngOnDestroy() {
this.mouseUpSubscription?.unsubscribe();
}
get value() {
return this.helper.getProperty(this.element, this.property.property);
}
set value(val) {
this.helper.setProperty(this.element, this.property.property, this.checkValue(val));
let container = this.model.getElementPage(this.element) ?? this.model.getElementPanel(this.element);
this.render.insertElement(this.element, container.contentAreaWidth);
}
onLostFocus(object) {
if (this.checkValue(Number(object.currentTarget.value)) != this.value) {
this.value = Number(object.currentTarget.value);
}
else {
this.model.needToRefresh.next(true);
this.clear();
}
this.model.formEvents.next({ name: "ValueChanged" });
}
checkValue(value) {
let container = this.model.getElementPage(this.element) ?? this.model.getElementPanel(this.element);
let otherElements = Array.from(container.elements);
otherElements.splice(otherElements.indexOf(this.element), 1);
let freeAreaHeight = this.render.getFreeToBottomResizeArea(this.element, otherElements);
let oldValue = this.helper.getProperty(this.element, this.property.property);
let roundValue = Math.round(value / this.model.form.settings.gridVerticalStep) * this.model.form.settings.gridVerticalStep;
if (roundValue <= this.element.geometry.minHeight) {
return this.element.geometry.minHeight;
}
else if (roundValue >= oldValue + freeAreaHeight) {
return oldValue + freeAreaHeight;
}
else {
return roundValue;
}
}
clear() {
setTimeout(() => {
this.buttonDown = 0;
}, 0);
}
setIncDec(value) {
if (this.incTimeout) {
clearTimeout(this.incTimeout);
this.incTimeout = null;
}
setTimeout(() => {
this.value += value;
this.buttonDown = value;
this.incDecTimer();
this.model.formEvents.next({ name: "ValueChanged" });
}, 0);
}
incDecTimer(first = true) {
let this_ = this;
this.incTimeout = setTimeout(() => {
if (this_.buttonDown != 0) {
this_.value += this_.buttonDown;
this_.incDecTimer(false);
this.model.formEvents.next({ name: "ValueChanged" });
}
}, first ? 400 : 50);
}
ngOnInit() {
this.mouseUpSubscription = this.mouseService.getDocumentMouseUp().subscribe(() => {
this.buttonDown = 0;
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiComponentHeightEditorComponent, deps: [{ token: i1.StiModelService }, { token: i2.StiHelperService }, { token: StiRectangleGeometryLayout }, { token: i3.StiMouseService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StiComponentHeightEditorComponent, selector: "sti-component-height-editor", inputs: { property: "property", element: "element" }, ngImport: i0, template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr *ngIf="property.type === 'componentHeight'">
<td colspan="5" [style]="{ width: '100%' }">
<div class="number-box">
<div class="value">
<input
type="number"
(blur)="onLostFocus($event)"
(keyup.enter)="onLostFocus($event)"
[value]="value"
class="p-inputnumber-button"
[style]="{
width: '100%',
height: '100%',
fontSize: '12px',
fontWeight: '500',
padding: '3px 5px',
borderRadius: '3px'
}"
/>
</div>
<div class="buttons">
<div
class="button-up"
(mousedown)="setIncDec(model.form.settings.gridVerticalStep)"
(mouseup)="clear()"
(mouseleave)="clear()"
>
<i class="pi pi-angle-up"></i>
</div>
<div
class="button-down"
(mousedown)="setIncDec(-model.form.settings.gridVerticalStep)"
(mouseup)="clear()"
(mouseleave)="clear()"
>
<i class="pi pi-angle-down"></i>
</div>
</div>
</div>
</td>
</tr>
</table>
`, isInline: true, styles: [".value:hover{cursor:text}.image-upload>input{display:none}.number-box{width:100%;height:24px;border:1px solid var(--inputBorder-color);border-radius:3px;background-color:var(--input-color);position:relative;display:flex}.value{outline:none;width:100%;height:100%}.value input{outline:none;background-color:var(--input-color);-moz-appearance:textfield;color:var(--text-color);border:0px}.value input[type=number]::-webkit-inner-spin-button,.value input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;opacity:0}.value:after{content:\"\";position:absolute;right:22px;z-index:100;top:2px;width:1px;height:18px;background-color:var(--inputBorder-color)}.buttons{width:22px;height:100%;align-self:flex-end;display:flex;flex-direction:column;color:#bab9b8}.button-up{width:22px;position:relative;height:11px;border-bottom:1px solid var(--inputBorder-color);text-align:center}.button-up:hover{background-color:#d1d0cf}.button-up:active{background-color:#c3c3c3}.button-down{width:22px;position:relative;height:11px;text-align:center}.button-down:hover{background-color:#d1d0cf}.button-down:active{background-color:#c3c3c3}i{position:absolute;left:5px;height:8px;width:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiComponentHeightEditorComponent, decorators: [{
type: Component,
args: [{ selector: "sti-component-height-editor", template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr *ngIf="property.type === 'componentHeight'">
<td colspan="5" [style]="{ width: '100%' }">
<div class="number-box">
<div class="value">
<input
type="number"
(blur)="onLostFocus($event)"
(keyup.enter)="onLostFocus($event)"
[value]="value"
class="p-inputnumber-button"
[style]="{
width: '100%',
height: '100%',
fontSize: '12px',
fontWeight: '500',
padding: '3px 5px',
borderRadius: '3px'
}"
/>
</div>
<div class="buttons">
<div
class="button-up"
(mousedown)="setIncDec(model.form.settings.gridVerticalStep)"
(mouseup)="clear()"
(mouseleave)="clear()"
>
<i class="pi pi-angle-up"></i>
</div>
<div
class="button-down"
(mousedown)="setIncDec(-model.form.settings.gridVerticalStep)"
(mouseup)="clear()"
(mouseleave)="clear()"
>
<i class="pi pi-angle-down"></i>
</div>
</div>
</div>
</td>
</tr>
</table>
`, styles: [".value:hover{cursor:text}.image-upload>input{display:none}.number-box{width:100%;height:24px;border:1px solid var(--inputBorder-color);border-radius:3px;background-color:var(--input-color);position:relative;display:flex}.value{outline:none;width:100%;height:100%}.value input{outline:none;background-color:var(--input-color);-moz-appearance:textfield;color:var(--text-color);border:0px}.value input[type=number]::-webkit-inner-spin-button,.value input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;opacity:0}.value:after{content:\"\";position:absolute;right:22px;z-index:100;top:2px;width:1px;height:18px;background-color:var(--inputBorder-color)}.buttons{width:22px;height:100%;align-self:flex-end;display:flex;flex-direction:column;color:#bab9b8}.button-up{width:22px;position:relative;height:11px;border-bottom:1px solid var(--inputBorder-color);text-align:center}.button-up:hover{background-color:#d1d0cf}.button-up:active{background-color:#c3c3c3}.button-down{width:22px;position:relative;height:11px;text-align:center}.button-down:hover{background-color:#d1d0cf}.button-down:active{background-color:#c3c3c3}i{position:absolute;left:5px;height:8px;width:8px}\n"] }]
}], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiHelperService }, { type: StiRectangleGeometryLayout }, { type: i3.StiMouseService }], propDecorators: { property: [{
type: Input
}], element: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLWNvbXBvbmVudC1oZWlnaHQtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3Byb3BlcnR5R3JpZC9lZGl0b3JzL3N0aS1jb21wb25lbnQtaGVpZ2h0LWVkaXRvci9zdGktY29tcG9uZW50LWhlaWdodC1lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLDBCQUEwQixNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7QUErSXpGLE1BQU0sT0FBTyxpQ0FBaUM7SUFTNUMsWUFDUyxLQUFzQixFQUN0QixNQUF3QixFQUN4QixNQUFrQyxFQUNsQyxZQUE2QjtRQUg3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUE0QjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFUL0IsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztJQVFwQixDQUFDO0lBQ0osV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQVcsS0FBSyxDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8s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QUFDO0lBQ0wsQ0FBQzsrR0F6RlUsaUNBQWlDLGlGQS9JdkMsMEJBQTBCO21HQStJcEIsaUNBQWlDLHlIQXRJbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENUOzs0RkEwRlUsaUNBQWlDO2tCQXhJN0MsU0FBUzsrQkFDRSw2QkFBNkIsWUFDN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENUO3dHQXJESSwwQkFBMEIscURBZ0p0QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IFN0aVJlY3RhbmdsZUdlb21ldHJ5TGF5b3V0IGZyb20gXCIuLi8uLi8uLi8uLi9jb21wdXRlZC9TdGlSZWN0YW5nbGVHZW9tZXRyeUxheW91dFwiO1xyXG5pbXBvcnQgeyBTdGlGb3JtRWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi8uLi9lbGVtZW50cy9iYXNlL1N0aUZvcm1FbGVtZW50XCI7XHJcbmltcG9ydCB7IFN0aU1vZGVsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tb2RlbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aU1vdXNlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tb3VzZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0aUVkaXRvclByb3BlcnR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL29iamVjdHNcIjtcclxuaW1wb3J0IHsgU3RpSGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdGktaGVscGVyLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInN0aS1jb21wb25lbnQtaGVpZ2h0LWVkaXRvclwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8dGFibGUgY2xhc3M9XCJzdGktY2xlYXJcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cclxuICAgICAgPHRyICpuZ0lmPVwicHJvcGVydHkudHlwZSA9PT0gJ2NvbXBvbmVudEhlaWdodCdcIj5cclxuICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJudW1iZXItYm94XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkxvc3RGb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkxvc3RGb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRudW1iZXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxyXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNTAwJyxcclxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzNweCA1cHgnLFxyXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi11cFwiXHJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInNldEluY0RlYyhtb2RlbC5mb3JtLnNldHRpbmdzLmdyaWRWZXJ0aWNhbFN0ZXApXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cImNsZWFyKClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiY2xlYXIoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1hbmdsZS11cFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1kb3duXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwic2V0SW5jRGVjKC1tb2RlbC5mb3JtLnNldHRpbmdzLmdyaWRWZXJ0aWNhbFN0ZXApXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cImNsZWFyKClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiY2xlYXIoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXHJcbiAgICBgXHJcbiAgICAgIC52YWx1ZTpob3ZlciB7XHJcbiAgICAgICAgY3Vyc29yOiB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICAgIC5pbWFnZS11cGxvYWQgPiBpbnB1dCB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgfVxyXG4gICAgICAubnVtYmVyLWJveCB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlucHV0Qm9yZGVyLWNvbG9yKTtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5wdXQtY29sb3IpO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB9XHJcbiAgICAgIC52YWx1ZSB7XHJcbiAgICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIH1cclxuICAgICAgLnZhbHVlIGlucHV0IHtcclxuICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlucHV0LWNvbG9yKTtcclxuICAgICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcclxuICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7XHJcbiAgICAgICAgYm9yZGVyOiAwcHg7XHJcbiAgICAgIH1cclxuICAgICAgLnZhbHVlIGlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXHJcbiAgICAgIC52YWx1ZSBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcclxuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC52YWx1ZTphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgcmlnaHQ6IDIycHg7XHJcbiAgICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgICAgIHRvcDogMnB4O1xyXG4gICAgICAgIHdpZHRoOiAxcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAxOHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlucHV0Qm9yZGVyLWNvbG9yKTtcclxuICAgICAgfVxyXG4gICAgICAuYnV0dG9ucyB7XHJcbiAgICAgICAgd2lkdGg6IDIycHg7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHJcbiAgICAgICAgY29sb3I6IHJnYigxODYsIDE4NSwgMTg0KTtcclxuICAgICAgfVxyXG4gICAgICAuYnV0dG9uLXVwIHtcclxuICAgICAgICB3aWR0aDogMjJweDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xyXG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1pbnB1dEJvcmRlci1jb2xvcik7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICAgIC5idXR0b24tdXA6aG92ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMDksIDIwOCwgMjA3KTtcclxuICAgICAgfVxyXG4gICAgICAuYnV0dG9uLXVwOmFjdGl2ZSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE5NSwgMTk1LCAxOTUpO1xyXG4gICAgICB9XHJcbiAgICAgIC5idXR0b24tZG93biB7XHJcbiAgICAgICAgd2lkdGg6IDIycHg7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGhlaWdodDogMTFweDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgICAgLmJ1dHRvbi1kb3duOmhvdmVyIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA5LCAyMDgsIDIwNyk7XHJcbiAgICAgIH1cclxuICAgICAgLmJ1dHRvbi1kb3duOmFjdGl2ZSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE5NSwgMTk1LCAxOTUpO1xyXG4gICAgICB9XHJcbiAgICAgIGkge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBsZWZ0OiA1cHg7XHJcbiAgICAgICAgaGVpZ2h0OiA4cHg7XHJcbiAgICAgICAgd2lkdGg6IDhweDtcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RpQ29tcG9uZW50SGVpZ2h0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5OiBTdGlFZGl0b3JQcm9wZXJ0eTtcclxuICBASW5wdXQoKSBlbGVtZW50PzogU3RpRm9ybUVsZW1lbnQ7XHJcbiAgbW91c2VVcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBidXR0b25Eb3duID0gMDtcclxuICBwdWJsaWMgbW91c2VPdmVyID0gZmFsc2U7XHJcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGluY1RpbWVvdXQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9kZWw6IFN0aU1vZGVsU2VydmljZSxcclxuICAgIHB1YmxpYyBoZWxwZXI6IFN0aUhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcmVuZGVyOiBTdGlSZWN0YW5nbGVHZW9tZXRyeUxheW91dCxcclxuICAgIHB1YmxpYyBtb3VzZVNlcnZpY2U6IFN0aU1vdXNlU2VydmljZVxyXG4gICkge31cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlci5nZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHkucHJvcGVydHkpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmhlbHBlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQsIHRoaXMucHJvcGVydHkucHJvcGVydHksIHRoaXMuY2hlY2tWYWx1ZSh2YWwpKTtcclxuICAgIGxldCBjb250YWluZXIgPSB0aGlzLm1vZGVsLmdldEVsZW1lbnRQYWdlKHRoaXMuZWxlbWVudCkgPz8gdGhpcy5tb2RlbC5nZXRFbGVtZW50UGFuZWwodGhpcy5lbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyLmluc2VydEVsZW1lbnQodGhpcy5lbGVtZW50LCBjb250YWluZXIuY29udGVudEFyZWFXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBvbkxvc3RGb2N1cyhvYmplY3QpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrVmFsdWUoTnVtYmVyKG9iamVjdC5jdXJyZW50VGFyZ2V0LnZhbHVlKSkgIT0gdGhpcy52YWx1ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gTnVtYmVyKG9iamVjdC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kZWwubmVlZFRvUmVmcmVzaC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGVsLmZvcm1FdmVudHMubmV4dCh7IG5hbWU6IFwiVmFsdWVDaGFuZ2VkXCIgfSk7XHJcbiAgfVxyXG4gIGNoZWNrVmFsdWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgY29udGFpbmVyID0gdGhpcy5tb2RlbC5nZXRFbGVtZW50UGFnZSh0aGlzLmVsZW1lbnQpID8/IHRoaXMubW9kZWwuZ2V0RWxlbWVudFBhbmVsKHRoaXMuZWxlbWVudCk7XHJcbiAgICBsZXQgb3RoZXJFbGVtZW50cyA9IEFycmF5LmZyb20oY29udGFpbmVyLmVsZW1lbnRzKTtcclxuICAgIG90aGVyRWxlbWVudHMuc3BsaWNlKG90aGVyRWxlbWVudHMuaW5kZXhPZih0aGlzLmVsZW1lbnQpLCAxKTtcclxuICAgIGxldCBmcmVlQXJlYUhlaWdodCA9IHRoaXMucmVuZGVyLmdldEZyZWVUb0JvdHRvbVJlc2l6ZUFyZWEodGhpcy5lbGVtZW50LCBvdGhlckVsZW1lbnRzKTtcclxuICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuaGVscGVyLmdldFByb3BlcnR5KHRoaXMuZWxlbWVudCwgdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eSk7XHJcbiAgICBsZXQgcm91bmRWYWx1ZSA9XHJcbiAgICAgIE1hdGgucm91bmQodmFsdWUgLyB0aGlzLm1vZGVsLmZvcm0uc2V0dGluZ3MuZ3JpZFZlcnRpY2FsU3RlcCkgKiB0aGlzLm1vZGVsLmZvcm0uc2V0dGluZ3MuZ3JpZFZlcnRpY2FsU3RlcDtcclxuICAgIGlmIChyb3VuZFZhbHVlIDw9IHRoaXMuZWxlbWVudC5nZW9tZXRyeS5taW5IZWlnaHQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZW9tZXRyeS5taW5IZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHJvdW5kVmFsdWUgPj0gb2xkVmFsdWUgKyBmcmVlQXJlYUhlaWdodCkge1xyXG4gICAgICByZXR1cm4gb2xkVmFsdWUgKyBmcmVlQXJlYUhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByb3VuZFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5idXR0b25Eb3duID0gMDtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuICBzZXRJbmNEZWModmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuaW5jVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmNUaW1lb3V0KTtcclxuICAgICAgdGhpcy5pbmNUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZhbHVlICs9IHZhbHVlO1xyXG4gICAgICB0aGlzLmJ1dHRvbkRvd24gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pbmNEZWNUaW1lcigpO1xyXG4gICAgICB0aGlzLm1vZGVsLmZvcm1FdmVudHMubmV4dCh7IG5hbWU6IFwiVmFsdWVDaGFuZ2VkXCIgfSk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbmNEZWNUaW1lcihmaXJzdCA9IHRydWUpIHtcclxuICAgIGxldCB0aGlzXyA9IHRoaXM7XHJcbiAgICB0aGlzLmluY1RpbWVvdXQgPSBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXNfLmJ1dHRvbkRvd24gIT0gMCkge1xyXG4gICAgICAgICAgdGhpc18udmFsdWUgKz0gdGhpc18uYnV0dG9uRG93bjtcclxuICAgICAgICAgIHRoaXNfLmluY0RlY1RpbWVyKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMubW9kZWwuZm9ybUV2ZW50cy5uZXh0KHsgbmFtZTogXCJWYWx1ZUNoYW5nZWRcIiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpcnN0ID8gNDAwIDogNTBcclxuICAgICk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5tb3VzZVVwU3Vic2NyaXB0aW9uID0gdGhpcy5tb3VzZVNlcnZpY2UuZ2V0RG9jdW1lbnRNb3VzZVVwKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5idXR0b25Eb3duID0gMDtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=