UNPKG

@yoyoboot/l-52abp-ng-form-generator

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.

167 lines 20 kB
import { Directive, EventEmitter, Input, Output } from '@angular/core'; import { deepCopy } from '@delon/util'; import * as i0 from "@angular/core"; export class WidgetFormRenderBase { constructor(injector) { /** 要渲染的组件发生变更 */ this.widgetChange = new EventEmitter(); /** 当前选中的组件 */ this.selectComponent = {}; /** 当前选中的组件发生变更 */ this.selectComponentChange = new EventEmitter(); /** 复制部件 */ this.cloneComponent = new EventEmitter(); /** 删除部件 */ this.deleteComponent = new EventEmitter(); /** 清空子组件 */ this.clearComponent = new EventEmitter(); /** 禁用拖拽 */ this.disableDragDrop = false; } /** 当前是否存在子组件 */ get existChildren() { return Array.isArray(this.component.children) && this.component.children.length > 0; } // ============================== 抛事件 /** 调用克隆组件 */ callCloneComponent(widget) { this.cloneComponent.emit(widget); } /** 调用删除组件 */ callDeleteComponent(widget) { this.selectComponent = null; this.selectComponentChange.emit(null); this.deleteComponent.emit(widget); } /** 调用清空子组件 */ callClearComponent(widget) { this.clearComponent.emit(widget); } /** 调用选中组件 */ callSelectWidgetChange(widget, e) { this.selectComponent = widget; this.selectComponentChange.emit(widget); if (e) { e.preventDefault(); e.stopPropagation(); } return false; } // ============================== 处理 /** 处理选中组件 */ handleSelectComponent(widgetOrIndex, e) { if (typeof widgetOrIndex === 'number') { this.selectComponent = this.component.children[widgetOrIndex]; } else { this.selectComponent = widgetOrIndex; } this.selectComponentChange.emit(this.selectComponent); return; } /** 处理复制组件 */ handleComponentClone(index) { let cloneData = deepCopy(this.component.children[index]); cloneData.id = `id_${Math.ceil(Math.random() * 99999)}`; cloneData.name = `field${Math.ceil(Math.random() * 99999)}`; for (const item of cloneData.children) { item.id = `id_${Math.ceil(Math.random() * 99999)}`; item.name = `field${Math.ceil(Math.random() * 99999)}`; } this.component.children.splice(index, 0, cloneData); this.handleSelectComponent(index + 1); } /** 处理删除组件 */ handleComponentDelete(index) { this.selectComponent = null; if (this.component.children.length - 1 === index) { if (index === 0) { this.selectComponent = null; } else { this.handleSelectComponent(index - 1); } } else { this.handleSelectComponent(index + 1); } this.component.children.splice(index, 1); } /** 清空组件 */ handleComponentClear(index) { this.component.children[index].children = []; } getLabelWidth(item) { if (typeof item.labelWidth !== 'number') { item.labelWidth = 100; } return `${item.labelWidth}px`; } // ============================== 拖拽 /** 拖拽结束 */ onDragged(effect, parent, item) { // 排序 if (effect === 'move') { const index = parent.children.indexOf(item); parent.children.splice(index, 1); } } /** 放下 */ onDngDrop(event, target) { if (!target) { return; } if (!Array.isArray(target.children)) { target.children = []; } // 处理index let eventIndex = event.index; if (typeof eventIndex === 'undefined') { eventIndex = target.children.length; } // 处理数据 const newWidget = event.data; // copy的数据进行处理 if (event.dropEffect === 'copy') { newWidget.id = `id_${Math.ceil(Math.random() * 99999)}`; newWidget.name = `field${Math.ceil(Math.random() * 99999)}`; newWidget.placeholder = ''; newWidget.span = 24; if (!Array.isArray(newWidget.children)) { newWidget.children = []; } } // 处理目标数组 if (event.dropEffect === 'copy' || event.dropEffect === 'move') { target.children.splice(eventIndex, 0, newWidget); } if (target.bordered) event.data.bordered = true; } } WidgetFormRenderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WidgetFormRenderBase, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); WidgetFormRenderBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: WidgetFormRenderBase, inputs: { parentComponent: "parentComponent", component: "component", widgetIndex: "widgetIndex", selectComponent: "selectComponent", disableDragDrop: "disableDragDrop" }, outputs: { widgetChange: "widgetChange", selectComponentChange: "selectComponentChange", cloneComponent: "cloneComponent", deleteComponent: "deleteComponent", clearComponent: "clearComponent" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WidgetFormRenderBase, decorators: [{ type: Directive }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { parentComponent: [{ type: Input }], component: [{ type: Input }], widgetChange: [{ type: Output }], widgetIndex: [{ type: Input }], selectComponent: [{ type: Input }], selectComponentChange: [{ type: Output }], cloneComponent: [{ type: Output }], deleteComponent: [{ type: Output }], clearComponent: [{ type: Output }], disableDragDrop: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWZvcm0tcmVuZGVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sLTUyYWJwLW5nLWZvcm0tZ2VuZXJhdG9yL3NyYy9mb3JtLWRlc2lnbmVyL2NvbW1vbi1jb21wb25lbnQvd2lkZ2V0LWZvcm0tcmVuZGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUtMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUt2QyxNQUFNLE9BQWdCLG9CQUFvQjtJQW9DeEMsWUFBWSxRQUFrQjtRQTdCOUIsaUJBQWlCO1FBQ1AsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUszRCxjQUFjO1FBQ0wsb0JBQWUsR0FBa0IsRUFBRSxDQUFDO1FBRTdDLGtCQUFrQjtRQUNSLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRTNFLFdBQVc7UUFDRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTdELFdBQVc7UUFDRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTlELFlBQVk7UUFDRixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTdELFdBQVc7UUFDRixvQkFBZSxHQUFHLEtBQUssQ0FBQztJQU9BLENBQUM7SUFMbEMsZ0JBQWdCO0lBQ2hCLElBQUksYUFBYTtRQUNmLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUlELHFDQUFxQztJQUVyQyxhQUFhO0lBQ2Isa0JBQWtCLENBQUMsTUFBcUI7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QUFwQixvQkFBb0I7a0JBRHpDLFNBQVM7K0ZBR0MsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0UsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdJLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTTtnQkFHRSxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnTW92ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgZGVlcENvcHkgfSBmcm9tICdAZGVsb24vdXRpbCc7XG5pbXBvcnQgeyBJQ29tcG9uZW50RGVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRG5kRHJvcEV2ZW50LCBEcm9wRWZmZWN0IH0gZnJvbSAnLi4vLi4vbmd4LWRyYWctZHJvcCc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdpZGdldEZvcm1SZW5kZXJCYXNlIHtcbiAgLyoqIOeItue6p+e7hOS7tiAqL1xuICBASW5wdXQoKSBwYXJlbnRDb21wb25lbnQ6IElDb21wb25lbnREZWY7XG5cbiAgLyoqIOimgea4suafk+eahOe7hOS7tiAqL1xuICBASW5wdXQoKSBjb21wb25lbnQ6IElDb21wb25lbnREZWY7XG5cbiAgLyoqIOimgea4suafk+eahOe7hOS7tuWPkeeUn+WPmOabtCAqL1xuICBAT3V0cHV0KCkgd2lkZ2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tcG9uZW50RGVmPigpO1xuXG4gIC8qKiDlvZPliY3muLLmn5Pnu4Tku7bmiYDlsZ5pbmRleCAqL1xuICBASW5wdXQoKSB3aWRnZXRJbmRleDogbnVtYmVyO1xuXG4gIC8qKiDlvZPliY3pgInkuK3nmoTnu4Tku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0Q29tcG9uZW50OiBJQ29tcG9uZW50RGVmID0ge307XG5cbiAgLyoqIOW9k+WJjemAieS4reeahOe7hOS7tuWPkeeUn+WPmOabtCAqL1xuICBAT3V0cHV0KCkgc2VsZWN0Q29tcG9uZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tcG9uZW50RGVmIHwgbnVsbD4oKTtcblxuICAvKiog5aSN5Yi26YOo5Lu2ICovXG4gIEBPdXRwdXQoKSBjbG9uZUNvbXBvbmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbXBvbmVudERlZj4oKTtcblxuICAvKiog5Yig6Zmk6YOo5Lu2ICovXG4gIEBPdXRwdXQoKSBkZWxldGVDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21wb25lbnREZWY+KCk7XG5cbiAgLyoqIOa4heepuuWtkOe7hOS7tiAqL1xuICBAT3V0cHV0KCkgY2xlYXJDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21wb25lbnREZWY+KCk7XG5cbiAgLyoqIOemgeeUqOaLluaLvSAqL1xuICBASW5wdXQoKSBkaXNhYmxlRHJhZ0Ryb3AgPSBmYWxzZTtcblxuICAvKiog5b2T5YmN5piv5ZCm5a2Y5Zyo5a2Q57uE5Lu2ICovXG4gIGdldCBleGlzdENoaWxkcmVuKCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuY29tcG9uZW50LmNoaWxkcmVuKSAmJiB0aGlzLmNvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDmipvkuovku7ZcblxuICAvKiog6LCD55So5YWL6ZqG57uE5Lu2ICovXG4gIGNhbGxDbG9uZUNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLmNsb25lQ29tcG9uZW50LmVtaXQod2lkZ2V0KTtcbiAgfVxuXG4gIC8qKiDosIPnlKjliKDpmaTnu4Tku7YgKi9cbiAgY2FsbERlbGV0ZUNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnRDaGFuZ2UuZW1pdChudWxsKTtcbiAgICB0aGlzLmRlbGV0ZUNvbXBvbmVudC5lbWl0KHdpZGdldCk7XG4gIH1cblxuICAvKiog6LCD55So5riF56m65a2Q57uE5Lu2ICovXG4gIGNhbGxDbGVhckNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLmNsZWFyQ29tcG9uZW50LmVtaXQod2lkZ2V0KTtcbiAgfVxuXG4gIC8qKiDosIPnlKjpgInkuK3nu4Tku7YgKi9cbiAgY2FsbFNlbGVjdFdpZGdldENoYW5nZSh3aWRnZXQ6IElDb21wb25lbnREZWYsIGU/OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQgPSB3aWRnZXQ7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnRDaGFuZ2UuZW1pdCh3aWRnZXQpO1xuICAgIGlmIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0g5aSE55CGXG5cbiAgLyoqIOWkhOeQhumAieS4ree7hOS7tiAqL1xuICBoYW5kbGVTZWxlY3RDb21wb25lbnQod2lkZ2V0T3JJbmRleDogbnVtYmVyIHwgSUNvbXBvbmVudERlZiwgZT86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodHlwZW9mIHdpZGdldE9ySW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50LmNoaWxkcmVuW3dpZGdldE9ySW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IHdpZGdldE9ySW5kZXg7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RDb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKiDlpITnkIblpI3liLbnu4Tku7YgKi9cbiAgaGFuZGxlQ29tcG9uZW50Q2xvbmUoaW5kZXg6IG51bWJlcikge1xuICAgIGxldCBjbG9uZURhdGEgPSBkZWVwQ29weSh0aGlzLmNvbXBvbmVudC5jaGlsZHJlbltpbmRleF0pO1xuICAgIGNsb25lRGF0YS5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgY2xvbmVEYXRhLm5hbWUgPSBgZmllbGQke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNsb25lRGF0YS5jaGlsZHJlbikge1xuICAgICAgaXRlbS5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgICBpdGVtLm5hbWUgPSBgZmllbGQke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjbG9uZURhdGEpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4ICsgMSk7XG4gIH1cblxuICAvKiog5aSE55CG5Yig6Zmk57uE5Lu2ICovXG4gIGhhbmRsZUNvbXBvbmVudERlbGV0ZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLmNvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggLSAxID09PSBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4IC0gMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKiDmuIXnqbrnu4Tku7YgKi9cbiAgaGFuZGxlQ29tcG9uZW50Q2xlYXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29tcG9uZW50LmNoaWxkcmVuW2luZGV4XS5jaGlsZHJlbiA9IFtdO1xuICB9XG5cbiAgZ2V0TGFiZWxXaWR0aChpdGVtOiBJQ29tcG9uZW50RGVmKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0ubGFiZWxXaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGl0ZW0ubGFiZWxXaWR0aCA9IDEwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7aXRlbS5sYWJlbFdpZHRofXB4YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDmi5bmi71cblxuICAvKiog5ouW5ou957uT5p2fICovXG4gIG9uRHJhZ2dlZChlZmZlY3Q6IERyb3BFZmZlY3QsIHBhcmVudDogSUNvbXBvbmVudERlZiwgaXRlbTogSUNvbXBvbmVudERlZikge1xuICAgIC8vIOaOkuW6j1xuICAgIGlmIChlZmZlY3QgPT09ICdtb3ZlJykge1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiDmlL7kuIsgKi9cbiAgb25EbmdEcm9wKGV2ZW50OiBEbmREcm9wRXZlbnQsIHRhcmdldD86IElDb21wb25lbnREZWYpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0LmNoaWxkcmVuKSkge1xuICAgICAgdGFyZ2V0LmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIC8vIOWkhOeQhmluZGV4XG4gICAgbGV0IGV2ZW50SW5kZXggPSBldmVudC5pbmRleDtcbiAgICBpZiAodHlwZW9mIGV2ZW50SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBldmVudEluZGV4ID0gdGFyZ2V0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgLy8g5aSE55CG5pWw5o2uXG4gICAgY29uc3QgbmV3V2lkZ2V0ID0gZXZlbnQuZGF0YSBhcyBJQ29tcG9uZW50RGVmO1xuXG4gICAgLy8gY29weeeahOaVsOaNrui/m+ihjOWkhOeQhlxuICAgIGlmIChldmVudC5kcm9wRWZmZWN0ID09PSAnY29weScpIHtcbiAgICAgIG5ld1dpZGdldC5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgICBuZXdXaWRnZXQubmFtZSA9IGBmaWVsZCR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA5OTk5OSl9YDtcbiAgICAgIG5ld1dpZGdldC5wbGFjZWhvbGRlciA9ICcnO1xuICAgICAgbmV3V2lkZ2V0LnNwYW4gPSAyNDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdXaWRnZXQuY2hpbGRyZW4pKSB7XG4gICAgICAgIG5ld1dpZGdldC5jaGlsZHJlbiA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWkhOeQhuebruagh+aVsOe7hFxuICAgIGlmIChldmVudC5kcm9wRWZmZWN0ID09PSAnY29weScgfHwgZXZlbnQuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICB0YXJnZXQuY2hpbGRyZW4uc3BsaWNlKGV2ZW50SW5kZXgsIDAsIG5ld1dpZGdldCk7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldC5ib3JkZXJlZCkgZXZlbnQuZGF0YS5ib3JkZXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==