stimulsoft-forms
Version:
Stimulsoft PDF Forms
104 lines • 14.9 kB
JavaScript
import { Injectable } from '@angular/core';
import Guid from '../system/Guid';
import StiJson from '../system/StiJson';
import { StiClipboardData } from './objects';
import * as i0 from "@angular/core";
import * as i1 from "./model.service";
import * as i2 from "./sti-helper.service";
import * as i3 from "./sti-name.service";
import * as i4 from "./sti-draggable.service";
export class StiClipboardService {
constructor(model, helper, nameService, draggableService) {
this.model = model;
this.helper = helper;
this.nameService = nameService;
this.draggableService = draggableService;
document.addEventListener("visibilitychange", () => {
if (!document.hidden) {
this.updateDataFromClipboard();
}
});
this.updateDataFromClipboard();
}
get hasCopy() {
return this.copiedElement ? true : false;
}
get canCopy() {
return this.model.selectedComponent?.element ? false : true;
}
updateDataFromClipboard() {
let this_ = this;
this.loadDataFromClipboard().then(e => {
if (e instanceof DOMException) {
setTimeout(() => this_.updateDataFromClipboard(), 500);
}
});
}
loadDataFromClipboard(forceReadClipboard = false) {
return navigator.permissions.query({ name: "clipboard-read" }).then(value => {
try {
return forceReadClipboard || value.state == "granted" ? navigator.clipboard.readText() : null;
}
catch {
return null;
}
}).then(data => {
try {
if (data && data.indexOf("StiFormsClipboard") >= 0) {
let clipboardData = JSON.parse(data);
let clazz = this.helper.getElementClass(clipboardData.type);
let element = new clazz();
let jObject = new StiJson();
let elementStr = this.helper.base64Decode(clipboardData.value);
jObject.deserialize(elementStr);
element.loadFromJsonObject(jObject);
if (clipboardData.displayValue) {
element["displayValue"] = this.helper.base64Decode(clipboardData.displayValue);
}
this.copiedElement = element;
}
}
catch {
return null;
}
}).catch(e => { return e; });
}
pasteElement(event) {
this.loadDataFromClipboard(true).then(() => {
if (this.copiedElement) {
let element = this.helper.clone(this.copiedElement);
element.name = this.nameService.checkElementName(element);
element.guid = Guid.newGuid().toString();
this.draggableService.startDrag(event, element, false, true);
}
}).catch(reason => {
//console.log(reason);
});
}
copyElement() {
let element = this.model.selectedComponent?.element;
if (element)
try {
this.copiedElement = this.helper.clone(element);
let elementStr = element.saveToJsonObject({}).serialize();
let base64Element = this.helper.base64Encode(elementStr);
let base64ElementValue = element["displayValue"] ? this.helper.base64Encode(element["displayValue"]) : null;
let clipboardData = new StiClipboardData(base64Element, element.type, base64ElementValue);
navigator.clipboard.writeText(JSON.stringify(clipboardData));
this.loadDataFromClipboard(true);
}
catch (e) {
//console.error(e);
}
}
cutElement() {
this.copyElement();
this.helper.deleteSelectedComponent();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiClipboardService, deps: [{ token: i1.StiModelService }, { token: i2.StiHelperService }, { token: i3.StiNameService }, { token: i4.StiDraggableService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiClipboardService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiClipboardService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.StiModelService }, { type: i2.StiHelperService }, { type: i3.StiNameService }, { type: i4.StiDraggableService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLWNsaXBib2FyZC1zZXZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdGltdWxzb2Z0LWZvcm1zL3NyYy9saWIvc2VydmljZXMvc3RpLWNsaXBib2FyZC1zZXZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQyxPQUFPLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUV4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7OztBQU03QyxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW1CLEtBQXNCLEVBQVMsTUFBd0IsRUFBUyxXQUEyQixFQUNyRyxnQkFBcUM7UUFEM0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUNyRyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQzVDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxZQUFZLFlBQVksRUFBRSxDQUFDO2dCQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLHFCQUE4QixLQUFLO1FBQ3ZELE9BQVEsU0FBUyxDQUFDLFdBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkYsSUFBSSxDQUFDO2dCQUNILE9BQU8sa0JBQWtCLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoRyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFBO1lBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuRCxJQUFJLGFBQWEsR0FBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1RCxJQUFJLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUM1QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9ELE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFcEMsSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ2pGLENBQUM7b0JBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFBO1lBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLHNCQUFzQjtRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7UUFDcEQsSUFBSSxPQUFPO1lBQ1QsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRWhELElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pELElBQUksa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM1RyxJQUFJLGFBQWEsR0FBcUIsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUU1RyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxtQkFBbUI7WUFDckIsQ0FBQztJQUNMLENBQUM7SUFHRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUN4QyxDQUFDOytHQTdGVSxtQkFBbUI7bUhBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IEd1aWQgZnJvbSAnLi4vc3lzdGVtL0d1aWQnO1xyXG5pbXBvcnQgU3RpSnNvbiBmcm9tICcuLi9zeXN0ZW0vU3RpSnNvbic7XHJcbmltcG9ydCB7IFN0aU1vZGVsU2VydmljZSB9IGZyb20gJy4vbW9kZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0aUNsaXBib2FyZERhdGEgfSBmcm9tICcuL29iamVjdHMnO1xyXG5pbXBvcnQgeyBTdGlEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi9zdGktZHJhZ2dhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9zdGktaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGlOYW1lU2VydmljZSB9IGZyb20gJy4vc3RpLW5hbWUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTdGlDbGlwYm9hcmRTZXJ2aWNlIHtcclxuICBwdWJsaWMgY29waWVkRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIG1vZGVsOiBTdGlNb2RlbFNlcnZpY2UsIHB1YmxpYyBoZWxwZXI6IFN0aUhlbHBlclNlcnZpY2UsIHB1YmxpYyBuYW1lU2VydmljZTogU3RpTmFtZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZHJhZ2dhYmxlU2VydmljZTogU3RpRHJhZ2dhYmxlU2VydmljZSkge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YUZyb21DbGlwYm9hcmQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhRnJvbUNsaXBib2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNDb3B5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29waWVkRWxlbWVudCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ29weSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50ID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGF0YUZyb21DbGlwYm9hcmQoKSB7XHJcbiAgICBsZXQgdGhpc18gPSB0aGlzO1xyXG4gICAgdGhpcy5sb2FkRGF0YUZyb21DbGlwYm9hcmQoKS50aGVuKGUgPT4ge1xyXG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpc18udXBkYXRlRGF0YUZyb21DbGlwYm9hcmQoKSwgNTAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YUZyb21DbGlwYm9hcmQoZm9yY2VSZWFkQ2xpcGJvYXJkOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIChuYXZpZ2F0b3IucGVybWlzc2lvbnMgYXMgYW55KS5xdWVyeSh7IG5hbWU6IFwiY2xpcGJvYXJkLXJlYWRcIiB9KS50aGVuKHZhbHVlID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm9yY2VSZWFkQ2xpcGJvYXJkIHx8IHZhbHVlLnN0YXRlID09IFwiZ3JhbnRlZFwiID8gbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCgpIDogbnVsbDtcclxuICAgICAgfSBjYXRjaCB7IHJldHVybiBudWxsIH1cclxuICAgIH0pLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5pbmRleE9mKFwiU3RpRm9ybXNDbGlwYm9hcmRcIikgPj0gMCkge1xyXG4gICAgICAgICAgbGV0IGNsaXBib2FyZERhdGE6IFN0aUNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgbGV0IGNsYXp6ID0gdGhpcy5oZWxwZXIuZ2V0RWxlbWVudENsYXNzKGNsaXBib2FyZERhdGEudHlwZSk7XHJcbiAgICAgICAgICBsZXQgZWxlbWVudCA9IG5ldyBjbGF6eigpO1xyXG4gICAgICAgICAgbGV0IGpPYmplY3QgPSBuZXcgU3RpSnNvbigpO1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnRTdHIgPSB0aGlzLmhlbHBlci5iYXNlNjREZWNvZGUoY2xpcGJvYXJkRGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICBqT2JqZWN0LmRlc2VyaWFsaXplKGVsZW1lbnRTdHIpO1xyXG4gICAgICAgICAgZWxlbWVudC5sb2FkRnJvbUpzb25PYmplY3Qoak9iamVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEuZGlzcGxheVZhbHVlKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRbXCJkaXNwbGF5VmFsdWVcIl0gPSB0aGlzLmhlbHBlci5iYXNlNjREZWNvZGUoY2xpcGJvYXJkRGF0YS5kaXNwbGF5VmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY29waWVkRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHsgcmV0dXJuIG51bGwgfVxyXG4gICAgfSkuY2F0Y2goZSA9PiB7IHJldHVybiBlIH0pO1xyXG4gIH1cclxuXHJcbiAgcGFzdGVFbGVtZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLmxvYWREYXRhRnJvbUNsaXBib2FyZCh0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29waWVkRWxlbWVudCkge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5oZWxwZXIuY2xvbmUodGhpcy5jb3BpZWRFbGVtZW50KTtcclxuICAgICAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLm5hbWVTZXJ2aWNlLmNoZWNrRWxlbWVudE5hbWUoZWxlbWVudCk7XHJcbiAgICAgICAgZWxlbWVudC5ndWlkID0gR3VpZC5uZXdHdWlkKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLnN0YXJ0RHJhZyhldmVudCwgZWxlbWVudCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKHJlYXNvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvcHlFbGVtZW50KCkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQpXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jb3BpZWRFbGVtZW50ID0gdGhpcy5oZWxwZXIuY2xvbmUoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGxldCBlbGVtZW50U3RyID0gZWxlbWVudC5zYXZlVG9Kc29uT2JqZWN0KHt9KS5zZXJpYWxpemUoKTtcclxuICAgICAgICBsZXQgYmFzZTY0RWxlbWVudCA9IHRoaXMuaGVscGVyLmJhc2U2NEVuY29kZShlbGVtZW50U3RyKTtcclxuICAgICAgICBsZXQgYmFzZTY0RWxlbWVudFZhbHVlID0gZWxlbWVudFtcImRpc3BsYXlWYWx1ZVwiXSA/IHRoaXMuaGVscGVyLmJhc2U2NEVuY29kZShlbGVtZW50W1wiZGlzcGxheVZhbHVlXCJdKSA6IG51bGw7XHJcbiAgICAgICAgbGV0IGNsaXBib2FyZERhdGE6IFN0aUNsaXBib2FyZERhdGEgPSBuZXcgU3RpQ2xpcGJvYXJkRGF0YShiYXNlNjRFbGVtZW50LCBlbGVtZW50LnR5cGUsIGJhc2U2NEVsZW1lbnRWYWx1ZSk7XHJcblxyXG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KGNsaXBib2FyZERhdGEpKTtcclxuICAgICAgICB0aGlzLmxvYWREYXRhRnJvbUNsaXBib2FyZCh0cnVlKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGN1dEVsZW1lbnQoKSB7XHJcbiAgICB0aGlzLmNvcHlFbGVtZW50KCk7XHJcbiAgICB0aGlzLmhlbHBlci5kZWxldGVTZWxlY3RlZENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19