UNPKG

ng-devui

Version:

DevUI components based on Angular

228 lines 30.3 kB
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core'; import { GanttScaleUnit } from './gantt.model'; import * as i0 from "@angular/core"; export class GanttMarkerDirective { constructor(element, renderer) { this.renderer = renderer; this.monthMark = false; this.weekend = false; this.today = false; this.milestone = ''; this.showDaySplitLine = false; this.hostElement = element.nativeElement; } ngOnChanges(changes) { const { index, ganttBarContainerElement, ganttScaleContainerOffsetLeft, monthMark, weekend, last, today, milestone, unit } = changes; if (this.showDaySplitLine && index) { if (this.index >= 0 && !this.daySplitLineElement && this.unit === GanttScaleUnit.day) { this.drawSplitLine(); } else if (this.index >= 0 && this.daySplitLineElement && this.unit === GanttScaleUnit.day) { this.updateSplitLine(); } } if (ganttBarContainerElement && this.ganttBarContainerElement) { this.initMarkElement(); } if (ganttScaleContainerOffsetLeft && this.ganttScaleContainerOffsetLeft) { this.setElementsStyle(); } if (monthMark) { if (this.monthMark) { this.initMarkElement(); } else { this.destroyMarkElement('monthMark'); } } if (weekend || last) { if (this.weekend && !this.last) { this.initMarkElement(); } else { this.destroyMarkElement('weekend'); } } if (today) { if (this.today) { this.initMarkElement(); } else { this.destroyMarkElement('today'); } } if (milestone) { if (this.milestone) { this.initMarkElement(); } else { this.destroyMarkElement('milestone'); } } if (unit && this.unit) { if (this.unit !== GanttScaleUnit.day) { this.destorySplitLine(); } this.setElementsStyle(); } } initMarkElement() { if (this.ganttBarContainerElement) { if (this.monthMark && !this.monthMarkElement) { const node = this.renderer.createElement('div'); this.renderer.addClass(node, 'devui-mark-line'); this.renderer.appendChild(this.ganttBarContainerElement, node); this.monthMarkElement = node; this.setElementsStyle(); } if (this.weekend && !this.last && !this.weekendElement) { const node = this.renderer.createElement('div'); this.renderer.addClass(node, 'devui-mark-stripe'); this.renderer.addClass(node, this.unit); this.renderer.appendChild(this.ganttBarContainerElement, node); this.weekendElement = node; this.setElementsStyle(); } if (this.today && !this.todayElement) { const node = this.renderer.createElement('div'); this.renderer.addClass(node, 'devui-mark-line'); this.renderer.addClass(node, 'today'); this.renderer.addClass(node, this.unit); this.renderer.appendChild(this.ganttBarContainerElement, node); this.todayElement = node; this.setElementsStyle(); } if (this.milestone && !this.milestoneElement) { const node = this.renderer.createElement('div'); this.renderer.addClass(node, 'devui-mark-line'); this.renderer.addClass(node, 'milestone'); this.renderer.addClass(node, this.unit); this.renderer.appendChild(this.ganttBarContainerElement, node); this.milestoneElement = node; this.setElementsStyle(); } } } drawSplitLine() { const node = this.renderer.createElement('div'); this.renderer.addClass(node, 'devui-day-split-line'); this.renderer.appendChild(this.ganttBarContainerElement, node); this.daySplitLineElement = node; this.updateSplitLine(); } updateSplitLine() { this.ganttScaleContainerOffsetLeft = this.ganttScaleContainerOffsetLeft ? this.ganttScaleContainerOffsetLeft : 0; const leftOffset = this.hostElement.offsetLeft + this.ganttScaleContainerOffsetLeft + 'px'; if (!this.weekend && this.index && this.daySplitLineElement) { this.renderer.setStyle(this.daySplitLineElement, 'left', leftOffset); } } destorySplitLine() { if (this.showDaySplitLine && this.daySplitLineElement) { this.renderer.removeChild(this.ganttBarContainerElement, this.daySplitLineElement); this.daySplitLineElement = null; } } removeMonthMark() { if (this.monthMarkElement) { this.renderer.removeChild(this.ganttBarContainerElement, this.monthMarkElement); this.monthMarkElement = null; } } removeWeekendMark() { if (this.weekendElement) { this.renderer.removeChild(this.ganttBarContainerElement, this.weekendElement); this.weekendElement = null; } } removeTodayMark() { if (this.todayElement) { this.renderer.removeChild(this.ganttBarContainerElement, this.todayElement); this.todayElement = null; } } removeMileStoneMark() { if (this.milestoneElement) { this.renderer.removeChild(this.ganttBarContainerElement, this.milestoneElement); this.milestoneElement = null; } } destroyMarkElement(type = 'all') { switch (type) { case 'monthMark': this.removeMonthMark(); break; case 'weekend': this.removeWeekendMark(); break; case 'today': this.removeTodayMark(); break; case 'milestone': this.removeMileStoneMark(); break; case 'all': this.removeMonthMark(); this.removeWeekendMark(); this.removeTodayMark(); this.removeMileStoneMark(); break; default: break; } } setElementsStyle() { this.ganttScaleContainerOffsetLeft = this.ganttScaleContainerOffsetLeft ? this.ganttScaleContainerOffsetLeft : 0; const leftOffset = this.hostElement.offsetLeft + this.ganttScaleContainerOffsetLeft + 'px'; if (this.monthMark && this.monthMarkElement) { this.renderer.setStyle(this.monthMarkElement, 'left', leftOffset); } if (this.weekend && this.weekendElement) { this.weekendElement.className = 'devui-mark-stripe ' + this.unit; this.renderer.setStyle(this.weekendElement, 'left', leftOffset); } if (this.today && this.todayElement) { this.todayElement.className = 'devui-mark-line today ' + this.unit; this.renderer.setStyle(this.todayElement, 'left', leftOffset); } if (this.milestone && this.milestoneElement) { this.milestoneElement.className = 'devui-mark-line milestone ' + this.unit; this.renderer.setStyle(this.milestoneElement, 'left', leftOffset); } } ngOnDestroy() { this.destroyMarkElement(); this.destorySplitLine(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GanttMarkerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GanttMarkerDirective, selector: "[dGanttMarker]", inputs: { ganttBarContainerElement: "ganttBarContainerElement", ganttScaleContainerOffsetLeft: "ganttScaleContainerOffsetLeft", monthMark: "monthMark", weekend: "weekend", today: "today", index: "index", milestone: "milestone", unit: "unit", date: "date", last: "last", showDaySplitLine: "showDaySplitLine" }, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GanttMarkerDirective, decorators: [{ type: Directive, args: [{ selector: '[dGanttMarker]', }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { ganttBarContainerElement: [{ type: Input }], ganttScaleContainerOffsetLeft: [{ type: Input }], monthMark: [{ type: Input }], weekend: [{ type: Input }], today: [{ type: Input }], index: [{ type: Input }], milestone: [{ type: Input }], unit: [{ type: Input }], date: [{ type: Input }], last: [{ type: Input }], showDaySplitLine: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtbWFya2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2dhbnR0L2dhbnR0LW1hcmtlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQVksT0FBbUIsRUFBVSxRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBaEJuRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFJZixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFTaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNySSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxL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QUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0E3TlUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7dUdBRVUsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHYW50dFNjYWxlVW5pdCB9IGZyb20gJy4vZ2FudHQubW9kZWwnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZEdhbnR0TWFya2VyXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYW50dE1hcmtlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBnYW50dEJhckNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIEBJbnB1dCgpIGdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgbW9udGhNYXJrID0gZmFsc2U7XHJcbiAgQElucHV0KCkgd2Vla2VuZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRvZGF5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaWxlc3RvbmUgPSAnJztcclxuICBASW5wdXQoKSB1bml0OiBHYW50dFNjYWxlVW5pdDtcclxuICBASW5wdXQoKSBkYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIGxhc3Q6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0RheVNwbGl0TGluZSA9IGZhbHNlO1xyXG4gIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBtb250aE1hcmtFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICB3ZWVrZW5kRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgdG9kYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBtaWxlc3RvbmVFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBkYXlTcGxpdExpbmVFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgICB0aGlzLmhvc3RFbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBpbmRleCwgZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCBnYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCwgbW9udGhNYXJrLCB3ZWVrZW5kLCBsYXN0LCB0b2RheSwgbWlsZXN0b25lLCB1bml0IH0gPSBjaGFuZ2VzO1xyXG4gICAgaWYgKHRoaXMuc2hvd0RheVNwbGl0TGluZSAmJiBpbmRleCkge1xyXG4gICAgICBpZiAodGhpcy5pbmRleCA+PSAwICYmICF0aGlzLmRheVNwbGl0TGluZUVsZW1lbnQgJiYgdGhpcy51bml0ID09PSBHYW50dFNjYWxlVW5pdC5kYXkpIHtcclxuICAgICAgICB0aGlzLmRyYXdTcGxpdExpbmUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IDAgJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50ICYmIHRoaXMudW5pdCA9PT0gR2FudHRTY2FsZVVuaXQuZGF5KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTcGxpdExpbmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChnYW50dEJhckNvbnRhaW5lckVsZW1lbnQgJiYgdGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbml0TWFya0VsZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgJiYgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCkge1xyXG4gICAgICB0aGlzLnNldEVsZW1lbnRzU3R5bGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobW9udGhNYXJrKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vbnRoTWFyaykge1xyXG4gICAgICAgIHRoaXMuaW5pdE1hcmtFbGVtZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TWFya0VsZW1lbnQoJ21vbnRoTWFyaycpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdlZWtlbmQgfHwgbGFzdCkge1xyXG4gICAgICBpZiAodGhpcy53ZWVrZW5kICYmICF0aGlzLmxhc3QpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCd3ZWVrZW5kJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9kYXkpIHtcclxuICAgICAgaWYgKHRoaXMudG9kYXkpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCd0b2RheScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1pbGVzdG9uZSkge1xyXG4gICAgICBpZiAodGhpcy5taWxlc3RvbmUpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCdtaWxlc3RvbmUnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bml0ICYmIHRoaXMudW5pdCkge1xyXG4gICAgICBpZiAodGhpcy51bml0ICE9PSBHYW50dFNjYWxlVW5pdC5kYXkpIHtcclxuICAgICAgICB0aGlzLmRlc3RvcnlTcGxpdExpbmUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEVsZW1lbnRzU3R5bGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRNYXJrRWxlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICBpZiAodGhpcy5tb250aE1hcmsgJiYgIXRoaXMubW9udGhNYXJrRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mobm9kZSwgJ2RldnVpLW1hcmstbGluZScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIHRoaXMubW9udGhNYXJrRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMud2Vla2VuZCAmJiAhdGhpcy5sYXN0ICYmICF0aGlzLndlZWtlbmRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1zdHJpcGUnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5vZGUsIHRoaXMudW5pdCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgdGhpcy53ZWVrZW5kRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudG9kYXkgJiYgIXRoaXMudG9kYXlFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1saW5lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAndG9kYXknKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5vZGUsIHRoaXMudW5pdCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgdGhpcy50b2RheUVsZW1lbnQgPSBub2RlO1xyXG4gICAgICAgIHRoaXMuc2V0RWxlbWVudHNTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1pbGVzdG9uZSAmJiAhdGhpcy5taWxlc3RvbmVFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1saW5lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnbWlsZXN0b25lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCB0aGlzLnVuaXQpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIHRoaXMubWlsZXN0b25lRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdTcGxpdExpbmUoKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mobm9kZSwgJ2RldnVpLWRheS1zcGxpdC1saW5lJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCBub2RlKTtcclxuICAgIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCA9IG5vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZVNwbGl0TGluZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3BsaXRMaW5lKCkge1xyXG4gICAgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCA9IHRoaXMuZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgPyB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0IDogMDtcclxuICAgIGNvbnN0IGxlZnRPZmZzZXQgPSB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0ICsgJ3B4JztcclxuICAgIGlmICghdGhpcy53ZWVrZW5kICYmIHRoaXMuaW5kZXggJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kYXlTcGxpdExpbmVFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVzdG9yeVNwbGl0TGluZSgpIHtcclxuICAgIGlmICh0aGlzLnNob3dEYXlTcGxpdExpbmUgJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCk7XHJcbiAgICAgIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVNb250aE1hcmsoKSB7XHJcbiAgICBpZiAodGhpcy5tb250aE1hcmtFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMubW9udGhNYXJrRWxlbWVudCk7XHJcbiAgICAgIHRoaXMubW9udGhNYXJrRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVXZWVrZW5kTWFyaygpIHtcclxuICAgIGlmICh0aGlzLndlZWtlbmRFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMud2Vla2VuZEVsZW1lbnQpO1xyXG4gICAgICB0aGlzLndlZWtlbmRFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVRvZGF5TWFyaygpIHtcclxuICAgIGlmICh0aGlzLnRvZGF5RWxlbWVudCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCB0aGlzLnRvZGF5RWxlbWVudCk7XHJcbiAgICAgIHRoaXMudG9kYXlFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU1pbGVTdG9uZU1hcmsoKSB7XHJcbiAgICBpZiAodGhpcy5taWxlc3RvbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMubWlsZXN0b25lRWxlbWVudCk7XHJcbiAgICAgIHRoaXMubWlsZXN0b25lRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXN0cm95TWFya0VsZW1lbnQodHlwZSA9ICdhbGwnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgJ21vbnRoTWFyayc6XHJcbiAgICAgIHRoaXMucmVtb3ZlTW9udGhNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnd2Vla2VuZCc6XHJcbiAgICAgIHRoaXMucmVtb3ZlV2Vla2VuZE1hcmsoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICd0b2RheSc6XHJcbiAgICAgIHRoaXMucmVtb3ZlVG9kYXlNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnbWlsZXN0b25lJzpcclxuICAgICAgdGhpcy5yZW1vdmVNaWxlU3RvbmVNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnYWxsJzpcclxuICAgICAgdGhpcy5yZW1vdmVNb250aE1hcmsoKTtcclxuICAgICAgdGhpcy5yZW1vdmVXZWVrZW5kTWFyaygpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRvZGF5TWFyaygpO1xyXG4gICAgICB0aGlzLnJlbW92ZU1pbGVTdG9uZU1hcmsoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RWxlbWVudHNTdHlsZSgpIHtcclxuICAgIHRoaXMuZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgPSB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0ID8gdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCA6IDA7XHJcbiAgICBjb25zdCBsZWZ0T2Zmc2V0ID0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCArICdweCc7XHJcbiAgICBpZiAodGhpcy5tb250aE1hcmsgJiYgdGhpcy5tb250aE1hcmtFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5tb250aE1hcmtFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndlZWtlbmQgJiYgdGhpcy53ZWVrZW5kRWxlbWVudCkge1xyXG4gICAgICB0aGlzLndlZWtlbmRFbGVtZW50LmNsYXNzTmFtZSA9ICdkZXZ1aS1tYXJrLXN0cmlwZSAnICsgdGhpcy51bml0O1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMud2Vla2VuZEVsZW1lbnQsICdsZWZ0JywgbGVmdE9mZnNldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG9kYXkgJiYgdGhpcy50b2RheUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy50b2RheUVsZW1lbnQuY2xhc3NOYW1lID0gJ2RldnVpLW1hcmstbGluZSB0b2RheSAnICsgdGhpcy51bml0O1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9kYXlFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1pbGVzdG9uZSAmJiB0aGlzLm1pbGVzdG9uZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5taWxlc3RvbmVFbGVtZW50LmNsYXNzTmFtZSA9ICdkZXZ1aS1tYXJrLWxpbmUgbWlsZXN0b25lICcgKyB0aGlzLnVuaXQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5taWxlc3RvbmVFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lNYXJrRWxlbWVudCgpO1xyXG4gICAgdGhpcy5kZXN0b3J5U3BsaXRMaW5lKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==