formioangular-colfuturo
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
90 lines • 21.2 kB
JavaScript
import { Component } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "../form-manager.service";
import * as i2 from "@angular/router";
import * as i3 from "formioangular-colfuturo";
import * as i4 from "../form-manager.config";
import * as i5 from "ngx-bootstrap/modal";
import * as i6 from "@angular/common";
import * as i7 from "@angular/forms";
export class FormManagerFormComponent {
service;
route;
appConfig;
options;
modalService;
choice = "isUrl";
embedCode;
shareUrl;
projectId;
pathName;
goTo = "";
modalRef;
constructor(service, route, appConfig, options, modalService) {
this.service = service;
this.route = route;
this.appConfig = appConfig;
this.options = options;
this.modalService = modalService;
}
ngOnInit() {
this.service.reset(this.route);
this.service.loadForm().then((form) => {
this.service.formSrc = this.appConfig.appUrl + "/" + form.path;
this.projectId = form.project;
this.pathName = form.path;
this.getShareUrl();
});
}
getShareUrl() {
const src = this.appConfig.appUrl + "/" + this.pathName;
this.shareUrl = `${this.options.viewer}/#/?src=${encodeURIComponent(src)}`;
return this.shareUrl;
}
openEmbed(content) {
let goto = "";
if (this.goTo) {
goto += `if (d && d.formSubmission && d.formSubmission._id) { window.location.href = "${this.goTo}";}`;
}
let embedCode = '<script type="text/javascript">';
embedCode += "(function a(d, w, u) {";
embedCode += 'var h = d.getElementsByTagName("head")[0];';
embedCode += 'var s = d.createElement("script");';
embedCode += 's.type = "text/javascript";';
embedCode +=
's.src = "' +
this.options.viewer +
'/assets/lib/seamless/seamless.parent.min.js";';
embedCode += "s.onload = function b() {";
embedCode +=
'var f = d.getElementById("formio-form-' +
this.service.formio.formId +
'");';
embedCode += "if (!f || (typeof w.seamless === u)) {";
embedCode += "return setTimeout(b, 100);";
embedCode += "}";
embedCode +=
"w.seamless(f, {fallback:false}).receive(function(d, e) {" + goto + "});";
embedCode += "};";
embedCode += "h.appendChild(s);";
embedCode += "})(document, window);";
embedCode += "</script>";
embedCode += '<iframe id="formio-form-' + this.service.formio.formId + '" ';
embedCode +=
'style="width:100%;border:none;" height="800px" src="' +
this.shareUrl +
'&iframe=1"></iframe>';
this.embedCode = embedCode;
this.modalRef = this.modalService.show(content, { class: "modal-lg" });
}
choices(string) {
this.choice = string;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, deps: [{ token: i1.FormManagerService }, { token: i2.ActivatedRoute }, { token: i3.FormioAppConfig }, { token: i4.FormManagerConfig }, { token: i5.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerFormComponent, selector: "ng-component", ngImport: i0, template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\n<ul class=\"nav nav-tabs mb-2\">\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\n</ul>\n<router-outlet></router-outlet>\n<ng-template #content>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">Share or Embed this form</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <ul class=\"nav nav-tabs mr-auto mb-2\">\n <li class=\"nav-item\">\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\n </li>\n </ul>\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, decorators: [{
type: Component,
args: [{ template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\n<ul class=\"nav nav-tabs mb-2\">\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\n</ul>\n<router-outlet></router-outlet>\n<ng-template #content>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">Share or Embed this form</h4>\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <ul class=\"nav nav-tabs mr-auto mb-2\">\n <li class=\"nav-item\">\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\n </li>\n </ul>\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\n </div>\n</ng-template>\n" }]
}], ctorParameters: () => [{ type: i1.FormManagerService }, { type: i2.ActivatedRoute }, { type: i3.FormioAppConfig }, { type: i4.FormManagerConfig }, { type: i5.BsModalService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFVL0QsTUFBTSxPQUFPLHdCQUF3QjtJQVMxQjtJQUNBO0lBQ0E7SUFDQTtJQUNDO0lBWlYsTUFBTSxHQUFRLE9BQU8sQ0FBQztJQUN0QixTQUFTLENBQU07SUFDZixRQUFRLENBQU07SUFDZCxTQUFTLENBQU07SUFDZixRQUFRLENBQU07SUFDZCxJQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ2YsUUFBUSxDQUFhO0lBQ3JCLFlBQ1MsT0FBMkIsRUFDM0IsS0FBcUIsRUFDckIsU0FBMEIsRUFDMUIsT0FBMEIsRUFDekIsWUFBNEI7UUFKN0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWdCO0lBQ25DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFdBQVcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUF5QjtRQUNqQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxnRkFBZ0YsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBRyxpQ0FBaUMsQ0FBQztRQUNsRCxTQUFTLElBQUksd0JBQXdCLENBQUM7UUFDdEMsU0FBUyxJQUFJLDRDQUE0QyxDQUFDO1FBQzFELFNBQVMsSUFBSSxvQ0FBb0MsQ0FBQztRQUNsRCxTQUFTLElBQUksNkJBQTZCLENBQUM7UUFDM0MsU0FBUztZQUNQLFdBQVc7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUNuQiwrQ0FBK0MsQ0FBQztRQUNsRCxTQUFTLElBQUksMkJBQTJCLENBQUM7UUFDekMsU0FBUztZQUNQLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFDMUIsS0FBSyxDQUFDO1FBQ1IsU0FBUyxJQUFJLHdDQUF3QyxDQUFDO1FBQ3RELFNBQVMsSUFBSSw0QkFBNEIsQ0FBQztRQUMxQyxTQUFTLElBQUksR0FBRyxDQUFDO1FBQ2pCLFNBQVM7WUFDUCwwREFBMEQsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzVFLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDbEIsU0FBUyxJQUFJLG1CQUFtQixDQUFDO1FBQ2pDLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQztRQUNyQyxTQUFTLElBQUksV0FBVyxDQUFDO1FBQ3pCLFNBQVMsSUFBSSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzVFLFNBQVM7WUFDUCxzREFBc0Q7Z0JBQ3RELElBQUksQ0FBQyxRQUFRO2dCQUNiLHNCQUFzQixDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQzt3R0F2RVUsd0JBQXdCOzRGQUF4Qix3QkFBd0Isb0RDVnJDLHNoRkFnQ0E7OzRGRHRCYSx3QkFBd0I7a0JBSHBDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2Zvcm0tbWFuYWdlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb3JtTWFuYWdlckNvbmZpZyB9IGZyb20gXCIuLi9mb3JtLW1hbmFnZXIuY29uZmlnXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEZvcm1pb0FwcENvbmZpZyB9IGZyb20gXCJmb3JtaW9hbmd1bGFyLWNvbGZ1dHVyb1wiO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9tb2RhbFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6IFwiLi9mb3JtLmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1NYW5hZ2VyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNob2ljZTogYW55ID0gXCJpc1VybFwiO1xuICBlbWJlZENvZGU6IGFueTtcbiAgc2hhcmVVcmw6IGFueTtcbiAgcHJvamVjdElkOiBhbnk7XG4gIHBhdGhOYW1lOiBhbnk7XG4gIGdvVG86IGFueSA9IFwiXCI7XG4gIG1vZGFsUmVmOiBCc01vZGFsUmVmO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmljZTogRm9ybU1hbmFnZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHVibGljIGFwcENvbmZpZzogRm9ybWlvQXBwQ29uZmlnLFxuICAgIHB1YmxpYyBvcHRpb25zOiBGb3JtTWFuYWdlckNvbmZpZyxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VydmljZS5yZXNldCh0aGlzLnJvdXRlKTtcbiAgICB0aGlzLnNlcnZpY2UubG9hZEZvcm0oKS50aGVuKChmb3JtKSA9PiB7XG4gICAgICB0aGlzLnNlcnZpY2UuZm9ybVNyYyA9IHRoaXMuYXBwQ29uZmlnLmFwcFVybCArIFwiL1wiICsgZm9ybS5wYXRoO1xuICAgICAgdGhpcy5wcm9qZWN0SWQgPSBmb3JtLnByb2plY3Q7XG4gICAgICB0aGlzLnBhdGhOYW1lID0gZm9ybS5wYXRoO1xuICAgICAgdGhpcy5nZXRTaGFyZVVybCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFNoYXJlVXJsKCkge1xuICAgIGNvbnN0IHNyYyA9IHRoaXMuYXBwQ29uZmlnLmFwcFVybCArIFwiL1wiICsgdGhpcy5wYXRoTmFtZTtcbiAgICB0aGlzLnNoYXJlVXJsID0gYCR7dGhpcy5vcHRpb25zLnZpZXdlcn0vIy8/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNyYyl9YDtcbiAgICByZXR1cm4gdGhpcy5zaGFyZVVybDtcbiAgfVxuXG4gIG9wZW5FbWJlZChjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgbGV0IGdvdG8gPSBcIlwiO1xuICAgIGlmICh0aGlzLmdvVG8pIHtcbiAgICAgIGdvdG8gKz0gYGlmIChkICYmIGQuZm9ybVN1Ym1pc3Npb24gJiYgZC5mb3JtU3VibWlzc2lvbi5faWQpIHsgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIiR7dGhpcy5nb1RvfVwiO31gO1xuICAgIH1cbiAgICBsZXQgZW1iZWRDb2RlID0gJzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPic7XG4gICAgZW1iZWRDb2RlICs9IFwiKGZ1bmN0aW9uIGEoZCwgdywgdSkge1wiO1xuICAgIGVtYmVkQ29kZSArPSAndmFyIGggPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXTsnO1xuICAgIGVtYmVkQ29kZSArPSAndmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7JztcbiAgICBlbWJlZENvZGUgKz0gJ3MudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7JztcbiAgICBlbWJlZENvZGUgKz1cbiAgICAgICdzLnNyYyA9IFwiJyArXG4gICAgICB0aGlzLm9wdGlvbnMudmlld2VyICtcbiAgICAgICcvYXNzZXRzL2xpYi9zZWFtbGVzcy9zZWFtbGVzcy5wYXJlbnQubWluLmpzXCI7JztcbiAgICBlbWJlZENvZGUgKz0gXCJzLm9ubG9hZCA9IGZ1bmN0aW9uIGIoKSB7XCI7XG4gICAgZW1iZWRDb2RlICs9XG4gICAgICAndmFyIGYgPSBkLmdldEVsZW1lbnRCeUlkKFwiZm9ybWlvLWZvcm0tJyArXG4gICAgICB0aGlzLnNlcnZpY2UuZm9ybWlvLmZvcm1JZCArXG4gICAgICAnXCIpOyc7XG4gICAgZW1iZWRDb2RlICs9IFwiaWYgKCFmIHx8ICh0eXBlb2Ygdy5zZWFtbGVzcyA9PT0gdSkpIHtcIjtcbiAgICBlbWJlZENvZGUgKz0gXCJyZXR1cm4gc2V0VGltZW91dChiLCAxMDApO1wiO1xuICAgIGVtYmVkQ29kZSArPSBcIn1cIjtcbiAgICBlbWJlZENvZGUgKz1cbiAgICAgIFwidy5zZWFtbGVzcyhmLCB7ZmFsbGJhY2s6ZmFsc2V9KS5yZWNlaXZlKGZ1bmN0aW9uKGQsIGUpIHtcIiArIGdvdG8gKyBcIn0pO1wiO1xuICAgIGVtYmVkQ29kZSArPSBcIn07XCI7XG4gICAgZW1iZWRDb2RlICs9IFwiaC5hcHBlbmRDaGlsZChzKTtcIjtcbiAgICBlbWJlZENvZGUgKz0gXCJ9KShkb2N1bWVudCwgd2luZG93KTtcIjtcbiAgICBlbWJlZENvZGUgKz0gXCI8L3NjcmlwdD5cIjtcbiAgICBlbWJlZENvZGUgKz0gJzxpZnJhbWUgaWQ9XCJmb3JtaW8tZm9ybS0nICsgdGhpcy5zZXJ2aWNlLmZvcm1pby5mb3JtSWQgKyAnXCIgJztcbiAgICBlbWJlZENvZGUgKz1cbiAgICAgICdzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyOm5vbmU7XCIgaGVpZ2h0PVwiODAwcHhcIiBzcmM9XCInICtcbiAgICAgIHRoaXMuc2hhcmVVcmwgK1xuICAgICAgJyZpZnJhbWU9MVwiPjwvaWZyYW1lPic7XG4gICAgdGhpcy5lbWJlZENvZGUgPSBlbWJlZENvZGU7XG4gICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coY29udGVudCwgeyBjbGFzczogXCJtb2RhbC1sZ1wiIH0pO1xuICB9XG5cbiAgY2hvaWNlcyhzdHJpbmcpIHtcbiAgICB0aGlzLmNob2ljZSA9IHN0cmluZztcbiAgfVxufVxuIiwiPGJ1dHRvbiAqbmdJZj1cIm9wdGlvbnMudmlld2VyXCIgY2xhc3M9XCJmbG9hdC1lbmQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwib3BlbkVtYmVkKGNvbnRlbnQpXCI+PGVtIGNsYXNzPVwiZmEgZmEtc2hhcmUtYWx0IGJpIGJpLXNoYXJlXCI+PC9lbT4gU2hhcmU8L2J1dHRvbj5cbjx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBtYi0yXCI+XG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCIuLi9cIj48ZW0gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgYmkgYmktY2hldnJvbi1sZWZ0XCI+PC9lbT48L2E+PC9saT5cbiAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJ2aWV3XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxlbSBjbGFzcz1cImZhIGZhLXBlbmNpbCBiaSBiaS1wZW5jaWxcIj48L2VtPiBFbnRlciBEYXRhPC9hPjwvbGk+XG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwic3VibWlzc2lvblwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1saXN0LWFsdCBiaSBiaS10YWJsZVwiPjwvZW0+IFZpZXcgRGF0YTwvYT48L2xpPlxuICA8bGkgKm5nSWY9XCJzZXJ2aWNlLmFjdGlvbkFsbG93ZWQoJ2Zvcm1FZGl0JylcIiBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwiZWRpdFwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1lZGl0IGJpIGJpLXBlbmNpbC1zcXVhcmVcIj48L2VtPiBFZGl0IEZvcm08L2E+PC9saT5cbiAgPGxpICpuZ0lmPVwic2VydmljZS5hY3Rpb25BbGxvd2VkKCdmb3JtRGVsZXRlJylcIiBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwiZGVsZXRlXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2ggYmkgYmktdHJhc2hcIj48L3NwYW4+PC9hPjwvbGk+XG48L3VsPlxuPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5TaGFyZSBvciBFbWJlZCB0aGlzIGZvcm08L2g0PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWxSZWYuaGlkZSgpXCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbXItYXV0byBtYi0yXCI+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBjaG9pY2UgPT09ICdpc1VybCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzVXJsJylcIj48ZW0gY2xhc3M9XCJmYSBmYS1saW5rIGJpIGJpLWxpbmtcIj48L2VtPiBVUkw8L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogY2hvaWNlID09PSAnaXNFbWJlZCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzRW1iZWQnKVwiPjxlbSBjbGFzcz1cImZhIGZhLWNvZGUgYmkgYmktY29kZS1zbGFzaFwiPjwvZW0+IEVtYmVkPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxwcmUgICpuZ0lmPVwiY2hvaWNlID09PSAnaXNFbWJlZCdcIj48dGV4dGFyZWEgb25jbGljaz1cInRoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdCgpXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiByb3dzPVwiOFwiIFtuZ01vZGVsXT1cImVtYmVkQ29kZVwiPjwvdGV4dGFyZWE+PC9wcmU+XG4gICAgPGlucHV0ICpuZ0lmPVwiY2hvaWNlID09PSAnaXNVcmwnXCIgdHlwZT1cInRleHRcIiBvbmNsaWNrPVwidGhpcy5mb2N1cygpO3RoaXMuc2VsZWN0KClcIiByZWFkb25seT1cInJlYWRvbmx5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdNb2RlbF09XCJzaGFyZVVybFwiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly9leGFtcGxlcy5mb3JtLmlvL2V4YW1wbGVcIj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiAoY2xpY2spPVwibW9kYWxSZWYuaGlkZSgpXCI+Q2xvc2U8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19