UNPKG

tibas-form-json-generator

Version:

Fully configured form generator via JSON data with a custom template for each attribute + onChange events.

126 lines 19.6 kB
/** * @fileoverview added by tsickle * Generated from: lib/tibas-form-json-generator.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Injector, Input, Output, ViewEncapsulation } from '@angular/core'; import { FormModel } from './models/form.model'; import { ItemModel } from './models/item.model'; import { AttributeModel } from './models/attribute.model'; /** @type {?} */ export let InjectorInstance; /** * Created by TIBAS-Mohammed on 2020-07-4. */ export class TibasFormJsonGeneratorComponent { /** * @param {?} injector */ constructor(injector) { this.injector = injector; this.mode = 'VIEW'; this.tibasFormIsValidated = new EventEmitter(); this.listSourceTypes = []; InjectorInstance = this.injector; this.listSourceTypes.push({ id: 1, name: 'OK' }); this.listSourceTypes.push({ id: 2, name: 'KO' }); } /** * @return {?} */ ngOnInit() { } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { } /** * @return {?} */ formChanged() { if (document.querySelector('#generatedForm .ng-invalid') == null) { this.tibasFormIsValidated.emit(true); } else { this.tibasFormIsValidated.emit(false); } // const that = this; // setTimeout(function() { // console.log(document.querySelector('#generatedForm .ng-invalid')); // if (document.querySelector('#generatedForm .ng-invalid') == null) { // that.tibasFormIsValidated.emit(true); // } else { // that.tibasFormIsValidated.emit(false); // } // }, 800); } /** * @param {?} checklist * @return {?} */ addItem(checklist) { this.item = new ItemModel(); /** @type {?} */ const rndm = Math.floor(Math.random() * (100 - 1 + 1)) + 1; // this.newItem.code = this.newItem.label.replace(/[^A-Z0-9]+/ig, '_').substr(0, 10).toUpperCase() + rndm; this.item.code = 'item_' + (checklist.items.length + 1) + '_R' + rndm; checklist.attributes.forEach((/** * @param {?} att * @return {?} */ att => { /** @type {?} */ let tpmAtt = new AttributeModel(); tpmAtt = Object.assign({}, att); tpmAtt.template = att.templateAtt; tpmAtt.value = ''; tpmAtt.required = false; this.item.attrValues.push(tpmAtt); })); checklist.items.push(this.item); } /** * @param {?} $event * @return {?} */ changedtrigger($event) { this.formChanged(); } } TibasFormJsonGeneratorComponent.decorators = [ { type: Component, args: [{ selector: 'tibas-form-json-generator', template: "<form #generatedForm=\"ngForm\" name=\"generatedForm\" id=\"generatedForm\" (change)=\"formChanged()\"\n (keyup)=\"formChanged()\">\n <div class=\"card\">\n <div class=\"card-header border-0\" *ngIf=\"formModel?.header\">\n <section>\n <div class=\"row\">\n <!--<label class=\"control-label\">{{headerAtt?.label}} :</label>\n <input [disabled]=\"headerAtt.disable\" [hidden]=\"headerAtt.hidden\" [required]=\"headerAtt.required && !headerAtt.hidden\" *ngIf=\"headerAtt.typeSource=='FREE_ENTRY'\" type=\"{{headerAtt.typeSourceFreeEntry}}\" class='' [(ngModel)]=\"headerAtt.value\" name=\"{{headerAtt?.code}}\" maxlength=\"{{headerAtt?.maxlength?headerAtt?.maxlength:255}}\"/>\n <select [disabled]=\"headerAtt.disable\" [hidden]=\"headerAtt.hidden\" [required]=\"headerAtt.required\" *ngIf=\"headerAtt.typeSource=='REF'\" class='' [(ngModel)]=\"headerAtt.value\">\n <option *ngFor=\"let ref of headerAtt?.refValues\" value=\"{{ref}}\" >{{ref}}</option>\n </select>-->\n <div [ngClass]=\"attribute.cssClass\" [position]=\"'HEADER'\" [mode]=\"mode\" dynamic-template *ngFor=\"let attribute of formModel?.header\"\n [template]=\"attribute.template\" (changedtrigger)=\"changedtrigger($event)\"\n [attribute]=\"attribute\" [headerOrFooter]=\"formModel\"></div>\n </div>\n </section>\n </div>\n <div class=\"card-body border-0 content table-responsive\" *ngIf=\"formModel?.body && formModel?.body?.length>0\">\n\n <div class=\"tabset\" *ngIf=\"mode=='VIEW' || mode=='READWITHTAB'\">\n <!-- Tabs -->\n <ng-container *ngFor=\"let tab of formModel?.body\">\n <input class=\"tabInput\" type=\"radio\" name=\"tabset\" id=\"{{tab.id}}\" [attr.aria-controls]=\"tab.id\">\n <label class=\"labelInput\" for=\"{{tab.id}}\">{{tab.label}}</label>\n </ng-container>\n\n\n <div class=\"tab-panels\">\n <section *ngFor=\"let checklist of formModel?.body;\" id=\"{{checklist.id}}\" class=\"tab-panel table-responsive\">\n\n <div class=\"tbl-header\">\n <div class=\"row\">\n <div class=\"col-5\"></div>\n <div class=\"col\" [mode]=\"mode\" dynamic-template *ngFor=\"let attribute of checklist?.attributes\" (changedtrigger)=\"changedtrigger($event)\"\n [template]=\"attribute.template\" [attribute]=\"attribute\"></div>\n\n </div>\n </div>\n <div class=\"tbl-content\">\n\n <div app-item-form *ngFor=\"let item of checklist?.items\" [level]=\"1\" [mode]=\"mode\" [child]=\"item\" (changedtrigger)=\"changedtrigger($event)\"></div>\n\n </div>\n\n </section>\n\n </div>\n\n </div>\n\n <div *ngIf=\"mode=='READ'\">\n\n <section *ngFor=\"let checklist of formModel?.body;\" class=\"tab-panel table-responsive\">\n\n <div class=\"tbl-header\">\n <div class=\"row\">\n <div class=\"col-5\"></div>\n <div class=\"col\" [mode]=\"mode\" dynamic-template *ngFor=\"let attribute of checklist?.attributes\" (changedtrigger)=\"changedtrigger($event)\"\n [template]=\"attribute.template\" [attribute]=\"attribute\"></div>\n\n </div>\n </div>\n <div class=\"tbl-content\">\n\n <div app-item-form *ngFor=\"let item of checklist?.items\" [level]=\"1\" [mode]=\"mode\" [child]=\"item\" (changedtrigger)=\"changedtrigger($event)\"></div>\n\n </div>\n\n </section>\n\n </div>\n\n <div *ngIf=\"mode=='EDIT'\">\n <section *ngFor=\"let checklist of formModel?.body;\" class=\"tab-panel table-responsive\">\n\n <div class=\"tbl-header\">\n <div class=\"row\">\n <div class=\"col-5\"></div>\n <div class=\"col\" [position]=\"'BODYTH'\" [mode]=\"mode\" dynamic-template *ngFor=\"let attribute of checklist?.attributes\" (changedtrigger)=\"changedtrigger($event)\"\n [template]=\"attribute.template\" [attribute]=\"attribute\"></div>\n\n </div>\n </div>\n <div class=\"tbl-content\">\n\n <div class=\"row\" style=\"height: 1.5rem;padding-left: 8px; \" *ngIf=\"mode=='EDIT'\">\n <i class=\"fa fa-plus faplusitem\" style=\"color: #616a71\" (click)=\"addItem(checklist);formChanged()\"></i>\n </div>\n\n <div app-item-form *ngFor=\"let item of checklist?.items\" [parentList]=\"checklist.items\" [level]=\"1\" [mode]=\"mode\" (changedtrigger)=\"changedtrigger($event)\" [listSourceTypes]=\"listSourceTypes\" [child]=\"item\"></div>\n\n\n </div>\n\n </section>\n </div>\n\n </div>\n <div class=\"card-footer border-0\" *ngIf=\"formModel?.footer\">\n <section>\n <!--<label class='control-label'>{{attribute?.label}} :</label>\n <input [disabled]='attribute.disable' [hidden]='attribute.hidden' [required]='attribute.required && !attribute.hidden' [(ngModel)]='attribute.value' name='{{attribute?.code}}' maxlength='{{attribute?.maxlength?attribute?.maxlength:255}}'/>\n <select [disabled]='attribute.disable' [hidden]='attribute.hidden' [required]='attribute.required && !attribute.hidden' name='{{attribute?.code}}' [(ngModel)]='attribute.value'>\n <option *ngFor='let ref of attribute?.refValues' value='{{ref}}' >{{ref}}</option>\n </select>-->\n <div [ngClass]=\"attribute.cssClass\" [position]=\"'FOOTER'\" [mode]=\"mode\" dynamic-template *ngFor=\"let attribute of formModel?.footer\"\n [template]=\"attribute.template\" (changedtrigger)=\"changedtrigger($event)\"\n [attribute]=\"attribute\" [headerOrFooter]=\"formModel\"></div>\n </section>\n </div>\n </div>\n\n</form>\n\n\n\n", encapsulation: ViewEncapsulation.Emulated, styles: ["h1{font-size:30px;color:#000;text-transform:uppercase;font-weight:300;text-align:center;margin-bottom:15px}table{width:100%;table-layout:fixed}.tbl-header{padding:.4rem;background:#f6f9fc;border-bottom:1px solid #ccc}.tbl-content{height:auto;overflow-x:auto;margin-top:0;border:1px solid rgba(255,255,255,.3)}.col-5,.tbl-header .row .col{text-align:left;font-weight:500;font-size:12px;color:#414950;text-transform:uppercase}.tbl-header .row{color:#23272c;font-size:.4rem;height:31px;text-transform:uppercase;letter-spacing:1px}.col,.col-5{font-size:12px;color:#666;padding-top:10px}.col-5,.tbl-content .row .col{margin:10px!important;padding:15px;text-align:left;vertical-align:middle;font-weight:300;font-size:12px;color:#000;border-bottom:1px solid rgba(255,255,255,.1)}.tbl-content .col{padding-bottom:5px}.tbl-content .row{border-bottom:1px solid #f3f3f3}.item-label{display:inline-block;white-space:nowrap!important;overflow:scroll}section{margin:-7px 5px 10px 10px}button,input,select{overflow:visible;border:1px solid gray;text-align:center;border-radius:6px;height:25px;width:130px;margin-bottom:10px;font-size:small}.nav-pills{width:450px}.nav-item{width:50%}.nav-pills .nav-link{font-weight:700;padding-top:13px;text-align:center;background:#343436;color:#fff;border-radius:30px;height:100px}.nav-pills .nav-link.active{background:#fff;color:#000}.tab-content{position:absolute;width:450px;height:auto;margin-top:-50px;background:#fff;color:#000;border-radius:30px;z-index:1000;box-shadow:0 10px 10px rgba(0,0,0,.4);padding:30px;margin-bottom:50px}.tabset>input[type=radio]{position:absolute;left:-200vw}.tabset .tab-panel{display:none}.tabset>input:first-child:checked~.tab-panels>.tab-panel:first-child,.tabset>input:nth-child(11):checked~.tab-panels>.tab-panel:nth-child(6),.tabset>input:nth-child(3):checked~.tab-panels>.tab-panel:nth-child(2),.tabset>input:nth-child(5):checked~.tab-panels>.tab-panel:nth-child(3),.tabset>input:nth-child(7):checked~.tab-panels>.tab-panel:nth-child(4),.tabset>input:nth-child(9):checked~.tab-panels>.tab-panel:nth-child(5){display:block}body{font:300 16px/1.5em Overpass,\"Open Sans\",Helvetica,sans-serif;color:#333;padding:30px}.tabset>label{position:relative;display:inline-block;padding:15px 15px 25px;border:1px solid transparent;border-bottom:0;cursor:pointer;font-weight:600}.tabset>label::after{content:\"\";position:absolute;left:15px;bottom:10px;width:22px;height:4px;background:#8d8d8d}.tabset>input:focus+label,.tabset>label:hover{color:#06c}.tabset>input:checked+label::after,.tabset>input:focus+label::after,.tabset>label:hover::after{background:#06c}.tabset>input:checked+label{border-color:#ccc;border-bottom:1px solid #fff;margin-bottom:5px;border-radius:20px 20px 0 0}.tab-panel{border-top:1px solid #ccc;margin-left:0}*,:after,:before{box-sizing:border-box}.tabset{margin-left:20px}.tbl-content{padding-left:10px}.card-footer,.card-header{background-color:unset}.faplusitem{margin-right:1rem;cursor:pointer}.additeminput{width:60%!important;margin-right:1rem}.labeleditable{display:inline-block;white-space:nowrap!important;overflow:scroll}"] }] } ]; /** @nocollapse */ TibasFormJsonGeneratorComponent.ctorParameters = () => [ { type: Injector } ]; TibasFormJsonGeneratorComponent.propDecorators = { formModel: [{ type: Input }], mode: [{ type: Input }], tibasFormIsValidated: [{ type: Output }] }; if (false) { /** @type {?} */ TibasFormJsonGeneratorComponent.prototype.formModel; /** @type {?} */ TibasFormJsonGeneratorComponent.prototype.mode; /** @type {?} */ TibasFormJsonGeneratorComponent.prototype.tibasFormIsValidated; /** @type {?} */ TibasFormJsonGeneratorComponent.prototype.item; /** @type {?} */ TibasFormJsonGeneratorComponent.prototype.listSourceTypes; /** * @type {?} * @private */ TibasFormJsonGeneratorComponent.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGliYXMtZm9ybS1qc29uLWdlbmVyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aWJhcy1mb3JtLWpzb24tZ2VuZXJhdG9yLyIsInNvdXJjZXMiOlsibGliL3RpYmFzLWZvcm0tanNvbi1nZW5lcmF0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7QUFJeEQsTUFBTSxLQUFLLGdCQUEwQjs7OztBQVlyQyxNQUFNLE9BQU8sK0JBQStCOzs7O0lBYzFDLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFSdEMsU0FBSSxHQUE2QyxNQUFNLENBQUM7UUFHeEQseUJBQW9CLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFHMUUsb0JBQWUsR0FBb0IsRUFBRSxDQUFDO1FBR3BDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDOzs7O0lBRUQsUUFBUTtJQUNSLENBQUM7Ozs7O0lBRUQsV0FBVyxDQUFDLE9BQXNCO0lBQ2xDLENBQUM7Ozs7SUFHRCxXQUFXO1FBQ1QsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7UUFDRCxxQkFBcUI7UUFDckIsMEJBQTBCO1FBQzFCLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsNENBQTRDO1FBQzVDLGFBQWE7UUFDYiw2Q0FBNkM7UUFDN0MsTUFBTTtRQUNOLFdBQVc7SUFFYixDQUFDOzs7OztJQUVELE9BQU8sQ0FBQyxTQUF5QjtRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7O2NBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzFELDBHQUEwRztRQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3RFLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFOztnQkFDN0IsTUFBTSxHQUFHLElBQUksY0FBYyxFQUFFO1lBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDbEMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUMsRUFBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7O0lBRUQsY0FBYyxDQUFDLE1BQVc7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7OztZQXRFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsZ3pMQUF5RDtnQkFFekQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7O2FBRTFDOzs7O1lBcEJnQyxRQUFROzs7d0JBdUJ0QyxLQUFLO21CQUdMLEtBQUs7bUNBR0wsTUFBTTs7OztJQU5QLG9EQUNxQjs7SUFFckIsK0NBQ3dEOztJQUV4RCwrREFDMEU7O0lBRTFFLCtDQUFnQjs7SUFDaEIsMERBQXNDOzs7OztJQUUxQixtREFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybU1vZGVsfSBmcm9tICcuL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7TmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0NoZWNrbGlzdE1vZGVsfSBmcm9tICcuL21vZGVscy9jaGVja2xpc3QubW9kZWwnO1xuaW1wb3J0IHtJdGVtTW9kZWx9IGZyb20gJy4vbW9kZWxzL2l0ZW0ubW9kZWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVNb2RlbH0gZnJvbSAnLi9tb2RlbHMvYXR0cmlidXRlLm1vZGVsJztcbmltcG9ydCB7Q2F0ZWdvcnlNb2RlbH0gZnJvbSAnLi9tb2RlbHMvY2F0ZWdvcnkubW9kZWwnO1xuaW1wb3J0IHt0aW1lb3V0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBsZXQgSW5qZWN0b3JJbnN0YW5jZTogSW5qZWN0b3I7XG5cbi8qKlxuICogQ3JlYXRlZCBieSBUSUJBUy1Nb2hhbW1lZCBvbiAyMDIwLTA3LTQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RpYmFzLWZvcm0tanNvbi1nZW5lcmF0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGliYXMtZm9ybS1qc29uLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpYmFzLWZvcm0tanNvbi1nZW5lcmF0b3IuY29tcG9uZW50LmNzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxuXG59KVxuZXhwb3J0IGNsYXNzIFRpYmFzRm9ybUpzb25HZW5lcmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgZm9ybU1vZGVsOiBGb3JtTW9kZWw7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ1ZJRVcnIHwgJ0VESVQnIHwgJ1JFQURXSVRIVEFCJyB8ICdSRUFEJyA9ICdWSUVXJztcblxuICBAT3V0cHV0KClcbiAgdGliYXNGb3JtSXNWYWxpZGF0ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBpdGVtOiBJdGVtTW9kZWw7XG4gIGxpc3RTb3VyY2VUeXBlczogQ2F0ZWdvcnlNb2RlbFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBJbmplY3Rvckluc3RhbmNlID0gdGhpcy5pbmplY3RvcjtcbiAgICB0aGlzLmxpc3RTb3VyY2VUeXBlcy5wdXNoKHtpZDogMSwgbmFtZTogJ09LJ30pO1xuICAgIHRoaXMubGlzdFNvdXJjZVR5cGVzLnB1c2goe2lkOiAyLCBuYW1lOiAnS08nfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgfVxuXG5cbiAgZm9ybUNoYW5nZWQoKSB7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNnZW5lcmF0ZWRGb3JtIC5uZy1pbnZhbGlkJykgPT0gbnVsbCkge1xuICAgICAgdGhpcy50aWJhc0Zvcm1Jc1ZhbGlkYXRlZC5lbWl0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpYmFzRm9ybUlzVmFsaWRhdGVkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICAvLyBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIC8vICAgY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2dlbmVyYXRlZEZvcm0gLm5nLWludmFsaWQnKSk7XG4gICAgLy8gICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2dlbmVyYXRlZEZvcm0gLm5nLWludmFsaWQnKSA9PSBudWxsKSB7XG4gICAgLy8gICAgIHRoYXQudGliYXNGb3JtSXNWYWxpZGF0ZWQuZW1pdCh0cnVlKTtcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIHRoYXQudGliYXNGb3JtSXNWYWxpZGF0ZWQuZW1pdChmYWxzZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSwgODAwKTtcblxuICB9XG5cbiAgYWRkSXRlbShjaGVja2xpc3Q6IENoZWNrbGlzdE1vZGVsKSB7XG4gICAgdGhpcy5pdGVtID0gbmV3IEl0ZW1Nb2RlbCgpO1xuICAgIGNvbnN0IHJuZG0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMTAwIC0gMSArIDEpKSArIDE7XG4gICAgLy8gdGhpcy5uZXdJdGVtLmNvZGUgPSB0aGlzLm5ld0l0ZW0ubGFiZWwucmVwbGFjZSgvW15BLVowLTldKy9pZywgJ18nKS5zdWJzdHIoMCwgMTApLnRvVXBwZXJDYXNlKCkgKyBybmRtO1xuICAgIHRoaXMuaXRlbS5jb2RlID0gJ2l0ZW1fJyArIChjaGVja2xpc3QuaXRlbXMubGVuZ3RoICsgMSkgKyAnX1InICsgcm5kbTtcbiAgICBjaGVja2xpc3QuYXR0cmlidXRlcy5mb3JFYWNoKGF0dCA9PiB7XG4gICAgICBsZXQgdHBtQXR0ID0gbmV3IEF0dHJpYnV0ZU1vZGVsKCk7XG4gICAgICB0cG1BdHQgPSBPYmplY3QuYXNzaWduKHt9LCBhdHQpO1xuICAgICAgdHBtQXR0LnRlbXBsYXRlID0gYXR0LnRlbXBsYXRlQXR0O1xuICAgICAgdHBtQXR0LnZhbHVlID0gJyc7XG4gICAgICB0cG1BdHQucmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXRlbS5hdHRyVmFsdWVzLnB1c2godHBtQXR0KTtcbiAgICB9KTtcbiAgICBjaGVja2xpc3QuaXRlbXMucHVzaCh0aGlzLml0ZW0pO1xuICB9XG5cbiAgY2hhbmdlZHRyaWdnZXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1DaGFuZ2VkKCk7XG4gIH1cbn1cbiJdfQ==