UNPKG

@sedeh/into-pipes

Version:

Have you ever wanted to transform data in different parts of your application into interactive objects without writing a single line of code?

157 lines 18.2 kB
import { Component, ViewChild, Output, EventEmitter } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../common/into.pipe"; export class InputComponent { constructor(renderer) { this.renderer = renderer; this.editName = false; this.disabled = false; this.active = true; this.locked = false; this.validate = (item, newValue) => true; this.onIntoComponentChange = new EventEmitter(); } keyup(event) { event.stopPropagation(); event.preventDefault(); if (!this.disabled) { const code = event.which; if (!code || (code === 13) || (code === 9) || (code === 27)) { this.blur(event); } } } blur(event) { event.stopPropagation(); event.preventDefault(); const newValue = String(event.target.value); if (this.oldValue !== newValue) { if (this.validate(this.data, newValue)) { this.source = newValue; this.editName = false; this.onIntoComponentChange.emit({ id: this.id, name: this.name, value: this.source, type: "change", item: this.data }); } else { this.source = this.oldValue; this.editName = false; } } this.editName = false; if (!this.disabled && this.oldValue !== String(this.source) && this.validate(this.data, String(this.source))) { this.onIntoComponentChange.emit({ id: this.id, name: this.name, value: this.source, item: this.data }); } } handleEdit(event) { const code = event.which; event.stopPropagation(); event.preventDefault(); if (!this.disabled && ((code === 13) || (code === 9))) { event.target.click(); } } clickName(event) { event.stopPropagation(); event.preventDefault(); if (!this.disabled) { this.editName = true; this.oldValue = String(this.source); setTimeout(() => { this.renderer.selectRootElement(this.nameEditor.nativeElement).focus(); }, 66); } } static settingsPatterns() { return ['input:::false', 'input:::true']; //placeholder, into a pipe, locked by default } transform(source, data, args) { this.source = source; this.data = data; this.placeholder = args && args.length ? args[0] : ""; this.formatting = args && args.length > 1 ? args[1] : ""; this.locked = (args && args.length > 2 && args[2].length) ? args[2] === 'true' : false; } } InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InputComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: InputComponent, selector: "input-component", outputs: { onIntoComponentChange: "onIntoComponentChange" }, viewQueries: [{ propertyName: "nameEditor", first: true, predicate: ["nameEditor"], descendants: true }, { propertyName: "nameHolder", first: true, predicate: ["nameHolder"], descendants: true }], ngImport: i0, template: ` <span *ngIf="editName || locked"> <input #nameEditor type='text' [id]="id" [name]="name" [disabled]="disabled" [value]="source" [placeholder]="placeholder" (blur)="blur($event)" (keyup)='keyup($event)'> </span> <span #nameHolder *ngIf="!locked && !editName && formatting" class="locked {{disabled ? 'disabled' : ''}}" tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)" [innerHTML]="source ? (source | into:formatting) : '&nbsp;'"> </span> <span #nameHolder *ngIf='!locked && !editName && !formatting' class='locked' tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)" [innerHTML]="source ? source : '&nbsp;'"> </span> `, isInline: true, styles: [".locked{display:inline-block;cursor:pointer;min-width:30px;width:100%;-webkit-user-select:none;user-select:none;border:1px solid transparent}input{cursor:beam}:host{width:100%;display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .locked:hover{border:var(--sedeh-solid-border, 1px solid #fabdab)}:host .locked.disabled:hover{border-color:transparent;cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.InToPipe, name: "into" }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InputComponent, decorators: [{ type: Component, args: [{ selector: 'input-component', template: ` <span *ngIf="editName || locked"> <input #nameEditor type='text' [id]="id" [name]="name" [disabled]="disabled" [value]="source" [placeholder]="placeholder" (blur)="blur($event)" (keyup)='keyup($event)'> </span> <span #nameHolder *ngIf="!locked && !editName && formatting" class="locked {{disabled ? 'disabled' : ''}}" tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)" [innerHTML]="source ? (source | into:formatting) : '&nbsp;'"> </span> <span #nameHolder *ngIf='!locked && !editName && !formatting' class='locked' tabindex="{{active ? 0 : -1}}" (keyup)='handleEdit($event)' (click)="clickName($event)" [innerHTML]="source ? source : '&nbsp;'"> </span> `, styles: [".locked{display:inline-block;cursor:pointer;min-width:30px;width:100%;-webkit-user-select:none;user-select:none;border:1px solid transparent}input{cursor:beam}:host{width:100%;display:table;float:left;min-height:var(--sedeh-min-height, 25px)}:host .locked:hover{border:var(--sedeh-solid-border, 1px solid #fabdab)}:host .locked.disabled:hover{border-color:transparent;cursor:default}\n"] }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { nameEditor: [{ type: ViewChild, args: ["nameEditor"] }], nameHolder: [{ type: ViewChild, args: ["nameHolder"] }], onIntoComponentChange: [{ type: Output, args: ["onIntoComponentChange"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW50by1waXBlcy9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBd0R0RixNQUFNLE9BQU8sY0FBYztJQXdCekIsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWhCdkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsYUFBUSxHQUFHLENBQUMsSUFBUyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBUzlDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFJM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFVO1FBQ2QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUc7Z0JBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7U0FDRjtJQUNILENBQUM7SUFDRCxJQUFJLENBQUMsS0FBVTtRQUNiLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FB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RSxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekYsQ0FBQzs7NEdBdkdVLGNBQWM7Z0dBQWQsY0FBYyx5VEFuRGI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E0QlQ7NEZBdUJRLGNBQWM7a0JBckQxQixTQUFTOytCQUNJLGlCQUFpQixZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTRCVDtnR0F1Q0gsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFlBQVk7Z0JBSXZCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixxQkFBcUI7c0JBRHBCLE1BQU07dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIFJlbmRlcmVyMiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGlwZUNvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2lucHV0LWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNwYW4gKm5nSWY9XCJlZGl0TmFtZSB8fCBsb2NrZWRcIj5cclxuICAgIDxpbnB1dCAjbmFtZUVkaXRvclxyXG4gICAgICAgIHR5cGU9J3RleHQnIFxyXG4gICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgW25hbWVdPVwibmFtZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbdmFsdWVdPVwic291cmNlXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIChibHVyKT1cImJsdXIoJGV2ZW50KVwiIFxyXG4gICAgICAgIChrZXl1cCk9J2tleXVwKCRldmVudCknPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gI25hbWVIb2xkZXJcclxuICAgICAgICAqbmdJZj1cIiFsb2NrZWQgJiYgIWVkaXROYW1lICYmIGZvcm1hdHRpbmdcIlxyXG4gICAgICAgIGNsYXNzPVwibG9ja2VkIHt7ZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJyd9fVwiIFxyXG4gICAgICAgIHRhYmluZGV4PVwie3thY3RpdmUgPyAwIDogLTF9fVwiXHJcbiAgICAgICAgKGtleXVwKT0naGFuZGxlRWRpdCgkZXZlbnQpJ1xyXG4gICAgICAgIChjbGljayk9XCJjbGlja05hbWUoJGV2ZW50KVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJzb3VyY2UgPyAoc291cmNlIHwgaW50bzpmb3JtYXR0aW5nKSA6ICcmbmJzcDsnXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiAjbmFtZUhvbGRlclxyXG4gICAgICAgICpuZ0lmPSchbG9ja2VkICYmICFlZGl0TmFtZSAmJiAhZm9ybWF0dGluZydcclxuICAgICAgICBjbGFzcz0nbG9ja2VkJyBcclxuICAgICAgICB0YWJpbmRleD1cInt7YWN0aXZlID8gMCA6IC0xfX1cIlxyXG4gICAgICAgIChrZXl1cCk9J2hhbmRsZUVkaXQoJGV2ZW50KSdcclxuICAgICAgICAoY2xpY2spPVwiY2xpY2tOYW1lKCRldmVudClcIlxyXG4gICAgICAgIFtpbm5lckhUTUxdPVwic291cmNlID8gc291cmNlIDogJyZuYnNwOydcIj5cclxuICAgIDwvc3Bhbj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgXHJcbiAgICAgICAgLmxvY2tlZCB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICBtaW4td2lkdGg6IDMwcHg7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7ICAgICAgIFxyXG4gICAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlucHV0IHtcclxuICAgICAgICAgIGN1cnNvcjogYmVhbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgOmhvc3Qge3dpZHRoOiAxMDAlO2Rpc3BsYXk6dGFibGU7ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OiB2YXIoLS1zZWRlaC1taW4taGVpZ2h0LCAyNXB4KX1cclxuICAgICAgICA6aG9zdCAubG9ja2VkOmhvdmVye2JvcmRlcjogdmFyKC0tc2VkZWgtc29saWQtYm9yZGVyLCAxcHggc29saWQgI2ZhYmRhYik7fVxyXG4gICAgICAgIDpob3N0IC5sb2NrZWQuZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtjdXJzb3I6IGRlZmF1bHQ7fVxyXG4gICAgICAgIGBcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgUGlwZUNvbXBvbmVudEludGVyZmFjZSB7XHJcblxyXG4gIGRhdGE6IGFueTtcclxuICBzb3VyY2UhOiBzdHJpbmc7XHJcbiAgaWQhOiBzdHJpbmc7XHJcbiAgbmFtZSE6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcclxuICBmb3JtYXR0aW5nITpzdHJpbmc7XHJcbiAgZWRpdE5hbWUgPSBmYWxzZTtcclxuICBvbGRWYWx1ZSE6IHN0cmluZztcclxuICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGFjdGl2ZSA9IHRydWU7XHJcbiAgbG9ja2VkID0gZmFsc2U7XHJcbiAgdmFsaWRhdGUgPSAoaXRlbTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB0cnVlO1xyXG5cclxuICBAVmlld0NoaWxkKFwibmFtZUVkaXRvclwiKVxyXG4gIG5hbWVFZGl0b3I6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm5hbWVIb2xkZXJcIilcclxuICBuYW1lSG9sZGVyOiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoXCJvbkludG9Db21wb25lbnRDaGFuZ2VcIilcclxuICBvbkludG9Db21wb25lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xyXG5cclxuICB9XHJcblxyXG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgY29uc3QgY29kZSA9IGV2ZW50LndoaWNoO1xyXG4gICAgICBpZiAoIWNvZGUgfHwgKGNvZGUgPT09IDEzKSB8fCAoY29kZSA9PT0gOSkgfHwgKGNvZGUgPT09IDI3KSApIHtcclxuICAgICAgICB0aGlzLmJsdXIoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJsdXIoZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gU3RyaW5nKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5vbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGUodGhpcy5kYXRhLCBuZXdWYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuZWRpdE5hbWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uSW50b0NvbXBvbmVudENoYW5nZS5lbWl0KHtcclxuICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuc291cmNlLFxyXG4gICAgICAgICAgdHlwZTogXCJjaGFuZ2VcIixcclxuICAgICAgICAgIGl0ZW06IHRoaXMuZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5vbGRWYWx1ZTtcclxuICAgICAgICB0aGlzLmVkaXROYW1lID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZWRpdE5hbWUgPSBmYWxzZTtcclxuICAgIGlmKCF0aGlzLmRpc2FibGVkICYmIHRoaXMub2xkVmFsdWUgIT09IFN0cmluZyh0aGlzLnNvdXJjZSkgJiYgdGhpcy52YWxpZGF0ZSh0aGlzLmRhdGEsIFN0cmluZyh0aGlzLnNvdXJjZSkpKSB7XHJcbiAgICAgIHRoaXMub25JbnRvQ29tcG9uZW50Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICB2YWx1ZTogdGhpcy5zb3VyY2UsXHJcbiAgICAgICAgaXRlbTogdGhpcy5kYXRhXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRWRpdChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBjb2RlID0gZXZlbnQud2hpY2g7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYoIXRoaXMuZGlzYWJsZWQgJiYgKChjb2RlID09PSAxMykgfHwgKGNvZGUgPT09IDkpKSkge1xyXG4gICAgICBldmVudC50YXJnZXQuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWNrTmFtZShldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuZWRpdE5hbWUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9sZFZhbHVlID0gU3RyaW5nKHRoaXMuc291cmNlKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCh0aGlzLm5hbWVFZGl0b3IubmF0aXZlRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgfSw2Nik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0dGluZ3NQYXR0ZXJucygpIHtcclxuICAgIHJldHVybiBbJ2lucHV0Ojo6ZmFsc2UnLCdpbnB1dDo6OnRydWUnXTsgLy9wbGFjZWhvbGRlciwgaW50byBhIHBpcGUsIGxvY2tlZCBieSBkZWZhdWx0XHJcbiAgfVxyXG4gIHRyYW5zZm9ybShzb3VyY2U6IGFueSwgZGF0YTogYW55LCBhcmdzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zb3VyY2U9IHNvdXJjZTtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyPSBhcmdzICYmIGFyZ3MubGVuZ3RoID8gYXJnc1swXSA6IFwiXCI7XHJcbiAgICB0aGlzLmZvcm1hdHRpbmcgPSBhcmdzICYmIGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3NbMV0gOiBcIlwiO1xyXG4gICAgdGhpcy5sb2NrZWQgPSAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDIgJiYgYXJnc1syXS5sZW5ndGgpID8gYXJnc1syXSA9PT0gJ3RydWUnIDogZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=