UNPKG

@swimlane/ngx-dnd

Version:

Drag and Drop for Angular2 and beyond!

204 lines 23.9 kB
import { Component, Input, ViewEncapsulation, HostBinding } from '@angular/core'; import { ContainerComponent } from '../container/container.component'; import { DraggableDirective } from '../../directives/ngx-draggable.directive'; import * as i0 from "@angular/core"; import * as i1 from "../container/container.component"; import * as i2 from "../../directives/ngx-draggable.directive"; import * as i3 from "@angular/common"; function ItemComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelement(1, "ngx-dnd-container", 3); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("model", ctx_r0.model)("template", ctx_r0.container.template)("dropZone", ctx_r0.dropZone)("dropZones", ctx_r0.dropZones)("removeOnSpill", ctx_r0.removeOnSpill)("droppableItemClass", ctx_r0.droppableItemClass)("copy", ctx_r0.copy); } } function ItemComponent_ng_container_2_1_ng_template_0_Template(rf, ctx) { } function ItemComponent_ng_container_2_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ItemComponent_ng_container_2_1_ng_template_0_Template, 0, 0, "ng-template", 5); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.container.template)("ngTemplateOutletContext", ctx_r0.data); } } function ItemComponent_ng_container_2_ng_container_2_ngx_dnd_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "ngx-dnd-container", 3); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵproperty("model", ctx_r0.model.children)("template", ctx_r0.container.template)("dropZone", ctx_r0.dropZone)("dropZones", ctx_r0.dropZones)("removeOnSpill", ctx_r0.removeOnSpill)("droppableItemClass", ctx_r0.droppableItemClass)("copy", ctx_r0.copy); } } function ItemComponent_ng_container_2_ng_container_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div", 6); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵtemplate(3, ItemComponent_ng_container_2_ng_container_2_ngx_dnd_container_3_Template, 1, 7, "ngx-dnd-container", 7); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", ctx_r0.model.label, " "); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r0.model.children); } } function ItemComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, ItemComponent_ng_container_2_1_Template, 1, 2, null, 4)(2, ItemComponent_ng_container_2_ng_container_2_Template, 4, 2, "ng-container", 4); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r0.container.template); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx_r0.container.template); } } function ItemComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainer(0); } } function ItemComponent_ng_container_4_1_ng_template_0_Template(rf, ctx) { } function ItemComponent_ng_container_4_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ItemComponent_ng_container_4_1_ng_template_0_Template, 0, 0, "ng-template", 5); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.container.template)("ngTemplateOutletContext", ctx_r0.data); } } function ItemComponent_ng_container_4_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 6); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", ctx_r0.model, " "); } } function ItemComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, ItemComponent_ng_container_4_1_Template, 1, 2, null, 4)(2, ItemComponent_ng_container_4_div_2_Template, 2, 1, "div", 8); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r0.container.template); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx_r0.container.template); } } /** * Component that allows nested ngxDroppable and ngxDraggables * Should only be use inside a ngx-dnd-container * Outside a ngx-dnd-container use ngxDroppable * * @export */ export class ItemComponent { container; draggableDirective; model; get dropZone() { return this._dropZone || this.container.dropZone; } set dropZone(val) { this._dropZone = val; } get dropZones() { return this._dropZones || this.container.dropZones; } set dropZones(val) { this._dropZones = val; } get droppableItemClass() { return this._droppableItemClass || this.container.droppableItemClass; } set droppableItemClass(val) { this._droppableItemClass = val; } get removeOnSpill() { return typeof this._removeOnSpill === 'boolean' ? this._removeOnSpill : this.container.removeOnSpill; } set removeOnSpill(val) { this._removeOnSpill = val; } get copy() { return typeof this._copy === 'boolean' ? this._copy : this.container.copy; } set copy(val) { this._copy = val; } _copy = false; _dropZone; _dropZones; _droppableItemClass; _removeOnSpill = false; data; get hasHandle() { return this.draggableDirective.hasHandle; } get moveDisabled() { return !this.draggableDirective.canMove(); } get classString() { const itemClass = typeof this.droppableItemClass === 'function' ? this.droppableItemClass(this.model) : this.droppableItemClass; const classes = ['ngx-dnd-item', itemClass || '']; if (this.moveDisabled) { classes.push('move-disabled'); } if (this.hasHandle) { classes.push('has-handle'); } return classes.join(' '); } get type() { if (Array.isArray(this.model)) { return 'array'; } return typeof this.model; } constructor(container, draggableDirective) { this.container = container; this.draggableDirective = draggableDirective; } ngOnInit() { this.data = { model: this.model, type: this.type, dropZone: this.dropZone, template: this.container.template }; } static ɵfac = function ItemComponent_Factory(t) { return new (t || ItemComponent)(i0.ɵɵdirectiveInject(i1.ContainerComponent), i0.ɵɵdirectiveInject(i2.DraggableDirective)); }; static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ItemComponent, selectors: [["ngx-dnd-item"]], hostVars: 2, hostBindings: function ItemComponent_HostBindings(rf, ctx) { if (rf & 2) { i0.ɵɵclassMap(ctx.classString); } }, inputs: { model: "model", dropZone: "dropZone", dropZones: "dropZones", droppableItemClass: "droppableItemClass", removeOnSpill: "removeOnSpill", copy: "copy" }, decls: 5, vars: 4, consts: [[3, "ngSwitch"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [3, "model", "template", "dropZone", "dropZones", "removeOnSpill", "droppableItemClass", "copy"], [4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "ngx-dnd-content"], [3, "model", "template", "dropZone", "dropZones", "removeOnSpill", "droppableItemClass", "copy", 4, "ngIf"], ["class", "ngx-dnd-content", 4, "ngIf"]], template: function ItemComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0, 0); i0.ɵɵtemplate(1, ItemComponent_ng_container_1_Template, 2, 7, "ng-container", 1)(2, ItemComponent_ng_container_2_Template, 3, 2, "ng-container", 1)(3, ItemComponent_ng_container_3_Template, 1, 0, "ng-container", 1)(4, ItemComponent_ng_container_4_Template, 3, 2, "ng-container", 2); i0.ɵɵelementContainerEnd(); } if (rf & 2) { i0.ɵɵproperty("ngSwitch", ctx.type); i0.ɵɵadvance(); i0.ɵɵproperty("ngSwitchCase", "array"); i0.ɵɵadvance(); i0.ɵɵproperty("ngSwitchCase", "object"); i0.ɵɵadvance(); i0.ɵɵproperty("ngSwitchCase", "undefined"); } }, dependencies: [i3.NgIf, i3.NgTemplateOutlet, i3.NgSwitch, i3.NgSwitchCase, i3.NgSwitchDefault, i1.ContainerComponent], styles: [".ngx-dnd-box,.ngx-dnd-item{margin:10px;padding:10px;background-color:#0003;transition:opacity .4s ease-in-out;border:1px solid lightblue;display:block}.ngx-dnd-box:not(.has-handle):not(.move-disabled),.ngx-dnd-box.has-handle [ngxdraghandle],.ngx-dnd-box.has-handle [ngxDragHandle],.ngx-dnd-item:not(.has-handle):not(.move-disabled),.ngx-dnd-item.has-handle [ngxdraghandle],.ngx-dnd-item.has-handle [ngxDragHandle]{cursor:move;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.ngx-dnd-box .ngx-dnd-content,.ngx-dnd-item .ngx-dnd-content{-webkit-user-select:none;user-select:none}.ngx-dnd-box:hover,.ngx-dnd-item:hover{border:1px solid blue}.ngx-dnd-box{height:40px;width:40px;line-height:20px;text-align:center;float:left}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)\";filter:alpha(opacity=20)}\n"], encapsulation: 2 }); } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ItemComponent, [{ type: Component, args: [{ selector: 'ngx-dnd-item', encapsulation: ViewEncapsulation.None, template: "<ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'array'\">\n <ngx-dnd-container\n [model]=\"model\"\n [template]=\"container.template\"\n [dropZone]=\"dropZone\"\n [dropZones]=\"dropZones\"\n [removeOnSpill]=\"removeOnSpill\"\n [droppableItemClass]=\"droppableItemClass\"\n [copy]=\"copy\"\n >\n </ngx-dnd-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'object'\">\n <ng-template *ngIf=\"container.template\" [ngTemplateOutlet]=\"container.template\" [ngTemplateOutletContext]=\"data\">\n </ng-template>\n <ng-container *ngIf=\"!container.template\">\n <div class=\"ngx-dnd-content\">\n {{ model.label }}\n </div>\n <ngx-dnd-container\n *ngIf=\"model.children\"\n [model]=\"model.children\"\n [template]=\"container.template\"\n [dropZone]=\"dropZone\"\n [dropZones]=\"dropZones\"\n [removeOnSpill]=\"removeOnSpill\"\n [droppableItemClass]=\"droppableItemClass\"\n [copy]=\"copy\"\n >\n </ngx-dnd-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'undefined'\"> </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-template *ngIf=\"container.template\" [ngTemplateOutlet]=\"container.template\" [ngTemplateOutletContext]=\"data\">\n </ng-template>\n <div *ngIf=\"!container.template\" class=\"ngx-dnd-content\">\n {{ model }}\n </div>\n </ng-container>\n</ng-container>\n", styles: [".ngx-dnd-box,.ngx-dnd-item{margin:10px;padding:10px;background-color:#0003;transition:opacity .4s ease-in-out;border:1px solid lightblue;display:block}.ngx-dnd-box:not(.has-handle):not(.move-disabled),.ngx-dnd-box.has-handle [ngxdraghandle],.ngx-dnd-box.has-handle [ngxDragHandle],.ngx-dnd-item:not(.has-handle):not(.move-disabled),.ngx-dnd-item.has-handle [ngxdraghandle],.ngx-dnd-item.has-handle [ngxDragHandle]{cursor:move;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.ngx-dnd-box .ngx-dnd-content,.ngx-dnd-item .ngx-dnd-content{-webkit-user-select:none;user-select:none}.ngx-dnd-box:hover,.ngx-dnd-item:hover{border:1px solid blue}.ngx-dnd-box{height:40px;width:40px;line-height:20px;text-align:center;float:left}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)\";filter:alpha(opacity=20)}\n"] }] }], () => [{ type: i1.ContainerComponent }, { type: i2.DraggableDirective }], { model: [{ type: Input }], dropZone: [{ type: Input }], dropZones: [{ type: Input }], droppableItemClass: [{ type: Input }], removeOnSpill: [{ type: Input }], copy: [{ type: Input }], classString: [{ type: HostBinding, args: ['class'] }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ItemComponent, { className: "ItemComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZG5kL3NyYy9saWIvY29tcG9uZW50cy9pdGVtL2l0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRuZC9zcmMvbGliL2NvbXBvbmVudHMvaXRlbS9pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7O0lDRjVFLDZCQUFzQztJQUNwQyx1Q0FTb0I7Ozs7SUFSbEIsY0FBZTtJQU1mLEFBREEsQUFEQSxBQURBLEFBREEsQUFEQSxBQURBLG9DQUFlLHVDQUNnQiw2QkFDViwrQkFDRSx1Q0FDUSxpREFDVSxxQkFDNUI7Ozs7SUFNZiwrRkFBaUg7OztJQUFqQyxBQUF4Qyw0REFBdUMsd0NBQWlDOzs7SUFNOUcsdUNBVW9COzs7SUFGbEIsQUFEQSxBQURBLEFBREEsQUFEQSxBQURBLEFBREEsNkNBQXdCLHVDQUNPLDZCQUNWLCtCQUNFLHVDQUNRLGlEQUNVLHFCQUM1Qjs7O0lBWmpCLDZCQUEwQztJQUN4Qyw4QkFBNkI7SUFDM0IsWUFDRjtJQUFBLGlCQUFNO0lBQ04sd0hBU0M7Ozs7SUFYQyxlQUNGO0lBREUsbURBQ0Y7SUFFRyxjQUFvQjtJQUFwQiw0Q0FBb0I7OztJQVIzQiw2QkFBdUM7SUFHckMsQUFGQSx3RUFBaUgsa0ZBRXZFOzs7O0lBRjVCLGNBQXdCO0lBQXhCLGdEQUF3QjtJQUV2QixjQUF5QjtJQUF6QixpREFB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QUFLO1lBU0YsSUFBSTtrQkFEUCxLQUFLO1lBd0JGLFdBQVc7a0JBRGQsV0FBVzttQkFBQyxPQUFPOztrRkExRFQsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRhaW5lci9jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERyYWdnYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd4LWRyYWdnYWJsZS5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGFsbG93cyBuZXN0ZWQgbmd4RHJvcHBhYmxlIGFuZCBuZ3hEcmFnZ2FibGVzXG4gKiBTaG91bGQgb25seSBiZSB1c2UgaW5zaWRlIGEgbmd4LWRuZC1jb250YWluZXJcbiAqIE91dHNpZGUgYSBuZ3gtZG5kLWNvbnRhaW5lciB1c2Ugbmd4RHJvcHBhYmxlXG4gKlxuICogQGV4cG9ydFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZG5kLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2l0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZWw6IGFueTtcblxuICBASW5wdXQoKVxuICBnZXQgZHJvcFpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3Bab25lIHx8IHRoaXMuY29udGFpbmVyLmRyb3Bab25lO1xuICB9XG4gIHNldCBkcm9wWm9uZSh2YWwpIHtcbiAgICB0aGlzLl9kcm9wWm9uZSA9IHZhbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkcm9wWm9uZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Ryb3Bab25lcyB8fCB0aGlzLmNvbnRhaW5lci5kcm9wWm9uZXM7XG4gIH1cbiAgc2V0IGRyb3Bab25lcyh2YWwpIHtcbiAgICB0aGlzLl9kcm9wWm9uZXMgPSB2YWw7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZHJvcHBhYmxlSXRlbUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9kcm9wcGFibGVJdGVtQ2xhc3MgfHwgdGhpcy5jb250YWluZXIuZHJvcHBhYmxlSXRlbUNsYXNzO1xuICB9XG4gIHNldCBkcm9wcGFibGVJdGVtQ2xhc3ModmFsKSB7XG4gICAgdGhpcy5fZHJvcHBhYmxlSXRlbUNsYXNzID0gdmFsO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlbW92ZU9uU3BpbGwoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9yZW1vdmVPblNwaWxsID09PSAnYm9vbGVhbicgPyB0aGlzLl9yZW1vdmVPblNwaWxsIDogdGhpcy5jb250YWluZXIucmVtb3ZlT25TcGlsbDtcbiAgfVxuICBzZXQgcmVtb3ZlT25TcGlsbCh2YWwpIHtcbiAgICB0aGlzLl9yZW1vdmVPblNwaWxsID0gdmFsO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvcHkoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9jb3B5ID09PSAnYm9vbGVhbicgPyB0aGlzLl9jb3B5IDogdGhpcy5jb250YWluZXIuY29weTtcbiAgfVxuICBzZXQgY29weSh2YWwpIHtcbiAgICB0aGlzLl9jb3B5ID0gdmFsO1xuICB9XG5cbiAgX2NvcHkgPSBmYWxzZTtcbiAgX2Ryb3Bab25lOiBhbnk7XG4gIF9kcm9wWm9uZXM6IGFueTtcbiAgX2Ryb3BwYWJsZUl0ZW1DbGFzczogYW55O1xuICBfcmVtb3ZlT25TcGlsbCA9IGZhbHNlO1xuICBkYXRhOiBhbnk7XG5cbiAgZ2V0IGhhc0hhbmRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGVEaXJlY3RpdmUuaGFzSGFuZGxlO1xuICB9XG5cbiAgZ2V0IG1vdmVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZHJhZ2dhYmxlRGlyZWN0aXZlLmNhbk1vdmUoKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NTdHJpbmcoKSB7XG4gICAgY29uc3QgaXRlbUNsYXNzID1cbiAgICAgIHR5cGVvZiB0aGlzLmRyb3BwYWJsZUl0ZW1DbGFzcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZHJvcHBhYmxlSXRlbUNsYXNzKHRoaXMubW9kZWwpIDogdGhpcy5kcm9wcGFibGVJdGVtQ2xhc3M7XG5cbiAgICBjb25zdCBjbGFzc2VzID0gWyduZ3gtZG5kLWl0ZW0nLCBpdGVtQ2xhc3MgfHwgJyddO1xuICAgIGlmICh0aGlzLm1vdmVEaXNhYmxlZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdtb3ZlLWRpc2FibGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0hhbmRsZSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdoYXMtaGFuZGxlJyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRhaW5lcjogQ29udGFpbmVyQ29tcG9uZW50LCBwdWJsaWMgZHJhZ2dhYmxlRGlyZWN0aXZlOiBEcmFnZ2FibGVEaXJlY3RpdmUpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBkcm9wWm9uZTogdGhpcy5kcm9wWm9uZSxcbiAgICAgIHRlbXBsYXRlOiB0aGlzLmNvbnRhaW5lci50ZW1wbGF0ZVxuICAgIH07XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInR5cGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FycmF5J1wiPlxuICAgIDxuZ3gtZG5kLWNvbnRhaW5lclxuICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJjb250YWluZXIudGVtcGxhdGVcIlxuICAgICAgW2Ryb3Bab25lXT1cImRyb3Bab25lXCJcbiAgICAgIFtkcm9wWm9uZXNdPVwiZHJvcFpvbmVzXCJcbiAgICAgIFtyZW1vdmVPblNwaWxsXT1cInJlbW92ZU9uU3BpbGxcIlxuICAgICAgW2Ryb3BwYWJsZUl0ZW1DbGFzc109XCJkcm9wcGFibGVJdGVtQ2xhc3NcIlxuICAgICAgW2NvcHldPVwiY29weVwiXG4gICAgPlxuICAgIDwvbmd4LWRuZC1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvYmplY3QnXCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29udGFpbmVyLnRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGFpbmVyLnRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImRhdGFcIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGFpbmVyLnRlbXBsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmd4LWRuZC1jb250ZW50XCI+XG4gICAgICAgIHt7IG1vZGVsLmxhYmVsIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZ3gtZG5kLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIm1vZGVsLmNoaWxkcmVuXCJcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsLmNoaWxkcmVuXCJcbiAgICAgICAgW3RlbXBsYXRlXT1cImNvbnRhaW5lci50ZW1wbGF0ZVwiXG4gICAgICAgIFtkcm9wWm9uZV09XCJkcm9wWm9uZVwiXG4gICAgICAgIFtkcm9wWm9uZXNdPVwiZHJvcFpvbmVzXCJcbiAgICAgICAgW3JlbW92ZU9uU3BpbGxdPVwicmVtb3ZlT25TcGlsbFwiXG4gICAgICAgIFtkcm9wcGFibGVJdGVtQ2xhc3NdPVwiZHJvcHBhYmxlSXRlbUNsYXNzXCJcbiAgICAgICAgW2NvcHldPVwiY29weVwiXG4gICAgICA+XG4gICAgICA8L25neC1kbmQtY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndW5kZWZpbmVkJ1wiPiA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29udGFpbmVyLnRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGFpbmVyLnRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImRhdGFcIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgKm5nSWY9XCIhY29udGFpbmVyLnRlbXBsYXRlXCIgY2xhc3M9XCJuZ3gtZG5kLWNvbnRlbnRcIj5cbiAgICAgIHt7IG1vZGVsIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=