@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
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWZvcm0tcmVuZGVyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sLTUyYWJwLW5nLWZvcm0tZ2VuZXJhdG9yL3NyYy9mb3JtLWRlc2lnbmVyL2NvbW1vbi1jb21wb25lbnQvd2lkZ2V0LWZvcm0tcmVuZGVyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUtMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUt2QyxNQUFNLE9BQWdCLG9CQUFvQjtJQW9DeEMsWUFBWSxRQUFrQjtRQTdCOUIsaUJBQWlCO1FBQ1AsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUszRCxjQUFjO1FBQ0wsb0JBQWUsR0FBa0IsRUFBRSxDQUFDO1FBRTdDLGtCQUFrQjtRQUNSLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRTNFLFdBQVc7UUFDRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTdELFdBQVc7UUFDRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTlELFlBQVk7UUFDRixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTdELFdBQVc7UUFDRixvQkFBZSxHQUFHLEtBQUssQ0FBQztJQU9BLENBQUM7SUFMbEMsZ0JBQWdCO0lBQ2hCLElBQUksYUFBYTtRQUNmLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUlELHFDQUFxQztJQUVyQyxhQUFhO0lBQ2Isa0JBQWtCLENBQUMsTUFBcUI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWE7SUFDYixtQkFBbUIsQ0FBQyxNQUFxQjtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjO0lBQ2Qsa0JBQWtCLENBQUMsTUFBcUI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWE7SUFDYixzQkFBc0IsQ0FBQyxNQUFxQixFQUFFLENBQWM7UUFDMUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRTtZQUNMLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDckI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxvQ0FBb0M7SUFFcEMsYUFBYTtJQUNiLHFCQUFxQixDQUFDLGFBQXFDLEVBQUUsQ0FBYztRQUN6RSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9EO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELE9BQU87SUFDVCxDQUFDO0lBRUQsYUFBYTtJQUNiLG9CQUFvQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekQsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEQsU0FBUyxDQUFDLElBQUksR0FBRyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUQsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsYUFBYTtJQUNiLHFCQUFxQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUNoRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN2QztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVztJQUNYLG9CQUFvQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQW1CO1FBQy9CLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUVELE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELG9DQUFvQztJQUVwQyxXQUFXO0lBQ1gsU0FBUyxDQUFDLE1BQWtCLEVBQUUsTUFBcUIsRUFBRSxJQUFtQjtRQUN0RSxLQUFLO1FBQ0wsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxTQUFTO0lBQ1QsU0FBUyxDQUFDLEtBQW1CLEVBQUUsTUFBc0I7UUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztTQUN0QjtRQUNELFVBQVU7UUFDVixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzdCLElBQUksT0FBTyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQ3JDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUNyQztRQUNELE9BQU87UUFDUCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBcUIsQ0FBQztRQUU5QyxjQUFjO1FBQ2QsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUMvQixTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxTQUFTLENBQUMsSUFBSSxHQUFHLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUMzQixTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ3pCO1NBQ0Y7UUFFRCxTQUFTO1FBQ1QsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUM5RCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNsRCxDQUFDOztrSEF4S21CLG9CQUFvQjtzR0FBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRHpDLFNBQVM7K0ZBR0MsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0UsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdJLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTTtnQkFHRSxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnTW92ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgZGVlcENvcHkgfSBmcm9tICdAZGVsb24vdXRpbCc7XG5pbXBvcnQgeyBJQ29tcG9uZW50RGVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRG5kRHJvcEV2ZW50LCBEcm9wRWZmZWN0IH0gZnJvbSAnLi4vLi4vbmd4LWRyYWctZHJvcCc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdpZGdldEZvcm1SZW5kZXJCYXNlIHtcbiAgLyoqIOeItue6p+e7hOS7tiAqL1xuICBASW5wdXQoKSBwYXJlbnRDb21wb25lbnQ6IElDb21wb25lbnREZWY7XG5cbiAgLyoqIOimgea4suafk+eahOe7hOS7tiAqL1xuICBASW5wdXQoKSBjb21wb25lbnQ6IElDb21wb25lbnREZWY7XG5cbiAgLyoqIOimgea4suafk+eahOe7hOS7tuWPkeeUn+WPmOabtCAqL1xuICBAT3V0cHV0KCkgd2lkZ2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tcG9uZW50RGVmPigpO1xuXG4gIC8qKiDlvZPliY3muLLmn5Pnu4Tku7bmiYDlsZ5pbmRleCAqL1xuICBASW5wdXQoKSB3aWRnZXRJbmRleDogbnVtYmVyO1xuXG4gIC8qKiDlvZPliY3pgInkuK3nmoTnu4Tku7YgKi9cbiAgQElucHV0KCkgc2VsZWN0Q29tcG9uZW50OiBJQ29tcG9uZW50RGVmID0ge307XG5cbiAgLyoqIOW9k+WJjemAieS4reeahOe7hOS7tuWPkeeUn+WPmOabtCAqL1xuICBAT3V0cHV0KCkgc2VsZWN0Q29tcG9uZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tcG9uZW50RGVmIHwgbnVsbD4oKTtcblxuICAvKiog5aSN5Yi26YOo5Lu2ICovXG4gIEBPdXRwdXQoKSBjbG9uZUNvbXBvbmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbXBvbmVudERlZj4oKTtcblxuICAvKiog5Yig6Zmk6YOo5Lu2ICovXG4gIEBPdXRwdXQoKSBkZWxldGVDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21wb25lbnREZWY+KCk7XG5cbiAgLyoqIOa4heepuuWtkOe7hOS7tiAqL1xuICBAT3V0cHV0KCkgY2xlYXJDb21wb25lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21wb25lbnREZWY+KCk7XG5cbiAgLyoqIOemgeeUqOaLluaLvSAqL1xuICBASW5wdXQoKSBkaXNhYmxlRHJhZ0Ryb3AgPSBmYWxzZTtcblxuICAvKiog5b2T5YmN5piv5ZCm5a2Y5Zyo5a2Q57uE5Lu2ICovXG4gIGdldCBleGlzdENoaWxkcmVuKCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuY29tcG9uZW50LmNoaWxkcmVuKSAmJiB0aGlzLmNvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDmipvkuovku7ZcblxuICAvKiog6LCD55So5YWL6ZqG57uE5Lu2ICovXG4gIGNhbGxDbG9uZUNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLmNsb25lQ29tcG9uZW50LmVtaXQod2lkZ2V0KTtcbiAgfVxuXG4gIC8qKiDosIPnlKjliKDpmaTnu4Tku7YgKi9cbiAgY2FsbERlbGV0ZUNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnRDaGFuZ2UuZW1pdChudWxsKTtcbiAgICB0aGlzLmRlbGV0ZUNvbXBvbmVudC5lbWl0KHdpZGdldCk7XG4gIH1cblxuICAvKiog6LCD55So5riF56m65a2Q57uE5Lu2ICovXG4gIGNhbGxDbGVhckNvbXBvbmVudCh3aWRnZXQ6IElDb21wb25lbnREZWYpIHtcbiAgICB0aGlzLmNsZWFyQ29tcG9uZW50LmVtaXQod2lkZ2V0KTtcbiAgfVxuXG4gIC8qKiDosIPnlKjpgInkuK3nu4Tku7YgKi9cbiAgY2FsbFNlbGVjdFdpZGdldENoYW5nZSh3aWRnZXQ6IElDb21wb25lbnREZWYsIGU/OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQgPSB3aWRnZXQ7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnRDaGFuZ2UuZW1pdCh3aWRnZXQpO1xuICAgIGlmIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0g5aSE55CGXG5cbiAgLyoqIOWkhOeQhumAieS4ree7hOS7tiAqL1xuICBoYW5kbGVTZWxlY3RDb21wb25lbnQod2lkZ2V0T3JJbmRleDogbnVtYmVyIHwgSUNvbXBvbmVudERlZiwgZT86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodHlwZW9mIHdpZGdldE9ySW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50LmNoaWxkcmVuW3dpZGdldE9ySW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCA9IHdpZGdldE9ySW5kZXg7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RDb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKiDlpITnkIblpI3liLbnu4Tku7YgKi9cbiAgaGFuZGxlQ29tcG9uZW50Q2xvbmUoaW5kZXg6IG51bWJlcikge1xuICAgIGxldCBjbG9uZURhdGEgPSBkZWVwQ29weSh0aGlzLmNvbXBvbmVudC5jaGlsZHJlbltpbmRleF0pO1xuICAgIGNsb25lRGF0YS5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgY2xvbmVEYXRhLm5hbWUgPSBgZmllbGQke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNsb25lRGF0YS5jaGlsZHJlbikge1xuICAgICAgaXRlbS5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgICBpdGVtLm5hbWUgPSBgZmllbGQke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjbG9uZURhdGEpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4ICsgMSk7XG4gIH1cblxuICAvKiog5aSE55CG5Yig6Zmk57uE5Lu2ICovXG4gIGhhbmRsZUNvbXBvbmVudERlbGV0ZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLmNvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggLSAxID09PSBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4IC0gMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q29tcG9uZW50KGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKiDmuIXnqbrnu4Tku7YgKi9cbiAgaGFuZGxlQ29tcG9uZW50Q2xlYXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29tcG9uZW50LmNoaWxkcmVuW2luZGV4XS5jaGlsZHJlbiA9IFtdO1xuICB9XG5cbiAgZ2V0TGFiZWxXaWR0aChpdGVtOiBJQ29tcG9uZW50RGVmKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0ubGFiZWxXaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGl0ZW0ubGFiZWxXaWR0aCA9IDEwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7aXRlbS5sYWJlbFdpZHRofXB4YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDmi5bmi71cblxuICAvKiog5ouW5ou957uT5p2fICovXG4gIG9uRHJhZ2dlZChlZmZlY3Q6IERyb3BFZmZlY3QsIHBhcmVudDogSUNvbXBvbmVudERlZiwgaXRlbTogSUNvbXBvbmVudERlZikge1xuICAgIC8vIOaOkuW6j1xuICAgIGlmIChlZmZlY3QgPT09ICdtb3ZlJykge1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiDmlL7kuIsgKi9cbiAgb25EbmdEcm9wKGV2ZW50OiBEbmREcm9wRXZlbnQsIHRhcmdldD86IElDb21wb25lbnREZWYpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0LmNoaWxkcmVuKSkge1xuICAgICAgdGFyZ2V0LmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIC8vIOWkhOeQhmluZGV4XG4gICAgbGV0IGV2ZW50SW5kZXggPSBldmVudC5pbmRleDtcbiAgICBpZiAodHlwZW9mIGV2ZW50SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBldmVudEluZGV4ID0gdGFyZ2V0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgLy8g5aSE55CG5pWw5o2uXG4gICAgY29uc3QgbmV3V2lkZ2V0ID0gZXZlbnQuZGF0YSBhcyBJQ29tcG9uZW50RGVmO1xuXG4gICAgLy8gY29weeeahOaVsOaNrui/m+ihjOWkhOeQhlxuICAgIGlmIChldmVudC5kcm9wRWZmZWN0ID09PSAnY29weScpIHtcbiAgICAgIG5ld1dpZGdldC5pZCA9IGBpZF8ke01hdGguY2VpbChNYXRoLnJhbmRvbSgpICogOTk5OTkpfWA7XG4gICAgICBuZXdXaWRnZXQubmFtZSA9IGBmaWVsZCR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA5OTk5OSl9YDtcbiAgICAgIG5ld1dpZGdldC5wbGFjZWhvbGRlciA9ICcnO1xuICAgICAgbmV3V2lkZ2V0LnNwYW4gPSAyNDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdXaWRnZXQuY2hpbGRyZW4pKSB7XG4gICAgICAgIG5ld1dpZGdldC5jaGlsZHJlbiA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWkhOeQhuebruagh+aVsOe7hFxuICAgIGlmIChldmVudC5kcm9wRWZmZWN0ID09PSAnY29weScgfHwgZXZlbnQuZHJvcEVmZmVjdCA9PT0gJ21vdmUnKSB7XG4gICAgICB0YXJnZXQuY2hpbGRyZW4uc3BsaWNlKGV2ZW50SW5kZXgsIDAsIG5ld1dpZGdldCk7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldC5ib3JkZXJlZCkgZXZlbnQuZGF0YS5ib3JkZXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==