UNPKG

@asadi/angular-date-components

Version:

`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S

212 lines 36.4 kB
import { Component } from '@angular/core'; import { ADCCommonService, ADCStaticValues, FlatEventBuilder, TableSelection } from '@asadi/angular-date-components/core'; import { AdcSchedulerBase } from '../adc-scheduler-base/adc-scheduler-base'; import * as i0 from "@angular/core"; import * as i1 from "@asadi/angular-date-components/core"; export class ADCDayViewComponent extends AdcSchedulerBase { constructor() { super(); this.year = 0; this.week = 0; this.day = 0; this.currentDate = ''; this.title = ''; this.hoursOfDay = ADCStaticValues.getHoursOfDay(); this.daysOfweek = ADCStaticValues.getDaysOfWeek(); this.monthsOfYear = this.dateAdapter.getMonthsOfYear(); this.dateSplitter = this.dateFormatter.DateSplitter; this.events = []; this.rows = []; this.weekends = []; this.holidays = []; this.today = this.dateAdapter.today(); this.commonService = new ADCCommonService(this.dateAdapter, this.labels); this.selectionManager = new TableSelection(this.dateFilter); this.eventBuilder = new FlatEventBuilder(); } ngOnInit() { super.init(); this.selectionManager.cellSelectionStream.subscribe(event => this.onDateRangeSelect(event.start, event.end)); this.eventBuilder.eventSelectionStream.subscribe(e => { this.onEventClick(e.event, e.dom, e.jsEvent); }); } dateFilter(cell1, cell2) { return (cell2.rowValue == cell1.rowValue && cell2.columnValue >= cell1.columnValue) || (cell2.rowValue > cell1.rowValue); } initViewHanlder() { if (this.startOf == null) { this.todayButtonHandler(); } else { this.day = this.dateAdapter.getDayIndexOf(this.startOf); this.week = this.dateAdapter.getWeekOf(this.startOf); this.year = this.dateAdapter.getYearOf(this.startOf); this.calculateCurrentDate(); } } todayButtonHandler() { this.day = this.dateAdapter.getCurrentDay(); this.week = this.dateAdapter.getCurrentWeek(); this.year = this.dateAdapter.getCurrentYear(); this.calculateCurrentDate(); } previousButtonHandler() { this.day--; if (this.day < 0) { this.day = 6; this.week--; if (this.week < 1) { this.year--; this.week = this.dateAdapter.getWeeksOfYear(this.year); } } this.calculateCurrentDate(); } nextButtonHandler() { this.day++; if (this.day > 6) { this.day = 0; this.week++; const weeksOfYear = this.dateAdapter.getWeeksOfYear(this.year); if (this.week > weeksOfYear) { this.week = 1; this.year++; } } this.calculateCurrentDate(); } calculateCurrentDate() { const date = this.dateAdapter.getDateOfDay(this.year, this.week, this.day); this.currentDate = this.dateAdapter.transformDate(+date.split(this.dateSplitter)[0], +date.split(this.dateSplitter)[1], +date.split(this.dateSplitter)[2]); const day = this.labels?.daysOfWeek[this.commonService.getDayIndex(this.day)] || this.daysOfweek[this.day]; const month = this.monthsOfYear[+date.split(this.dateSplitter)[1] - 1]; this.title = `${day} ${+date.split(this.dateSplitter)[2]} ${this.commonService.getMonthName(month) || month} ${this.labels?.year || "Year"} ${this.year}`; this.dateChangesHandler(); super.dateRangeChange({ startDate: this.currentDate, endDate: this.currentDate }); } eventChangesHandler(schedulerEvents) { const tableEvents = []; this.events = schedulerEvents; const viewEvents = this.tools.scheduler.getEventsBetweenDateRange(this.currentDate, this.currentDate, this.events); viewEvents.forEach((e) => { const row = this.rows[1]; const rowDate = this.tools.dateTime.dateOnly(row.value); const eventStartDate = this.tools.dateTime.dateOnly(e.startDate); const eventEndDate = this.tools.dateTime.dateOnly(e.endDate); const eventStartHour = this.tools.dateTime.hourOrDefault(e.startTime, '00'); const eventEndHour = this.tools.dateTime.hourOrDefault(e.endTime, '23'); const startColumnIndex = eventStartDate != rowDate ? -1 : row.columns.findIndex(c => { return this.tools.dateTime.hour(c.value) == eventStartHour; }); const endColumnIndex = eventEndDate != rowDate ? -1 : row.columns.findIndex(c => { return this.tools.dateTime.hour(c.value) == eventEndHour; }); const startTime = +this.tools.dateTime.minutesOrDefault(e.startTime, '00'); const endTime = +this.tools.dateTime.minutesOrDefault(e.endTime, '60'); const cellEvent = { columnStart: startColumnIndex != -1 ? startColumnIndex : null, columnEnd: endColumnIndex != -1 ? endColumnIndex : null, data: e, rowStart: 1, rowEnd: 1, offsetX: startTime / 60, fractionX: endTime / 60, overlapTolerance: this.options.eventOverlapTolerance / 60 }; if (e.allDay == true) { const eventHourEnd = +this.tools.dateTime.hourOrDefault(e.endTime, '23'); cellEvent.fractionX = 24 - eventHourEnd; } tableEvents.push(cellEvent); }); this.eventBuilder.data = tableEvents; } dateChangesHandler() { this.rows = this.getRowInitialValue(); const date = this.dateAdapter.getDateOfDay(this.year, this.week, this.day); const splittedDate = date.split(this.dateSplitter); const dayIndex = this.commonService.getDayIndex(this.day); const transformDate = this.dateAdapter.transformDate(+splittedDate[0], +splittedDate[1], +splittedDate[2]); const row = { label: this.labels?.daysOfWeek[dayIndex] || this.daysOfweek[dayIndex], verticalAlign: 'center', horizontalAlign: 'center', prefix: '', suffix: `${splittedDate[0]}${this.dateSplitter}${splittedDate[1]}${this.dateSplitter}${splittedDate[2]}`, value: transformDate.split('T')[0], classList: ''.concat(this.weekends.includes(this.day) || this.holidays.includes(this.currentDate.split('T')[0]) ? ' holiday ' : ' '), columns: [] }; this.hoursOfDay.forEach((hour) => { row.columns.push({ verticalAlign: 'center', horizontalAlign: 'center', selectable: true, classList: '', label: '', prefix: '', suffix: '', value: hour, }); }); this.rows.push(row); } weekendsChangesHandler(weekends) { this.weekends = weekends; this.dateChangesHandler(); } holidaysChangesHandler(holidays) { this.holidays = holidays; this.dateChangesHandler(); } onDateRangeSelect(start, end) { const e = { endDate: end.rowValue.split('T')[0], endTime: end.columnValue, startDate: start.rowValue.split('T')[0], startTime: start.columnValue, }; super.dateRangeSelect(e); } onEventClick(event, dom, jsEvent) { const schedulerEvent = this.events.filter(item => item.id == event.data.id)[0]; super.eventClick({ dom: dom, event: schedulerEvent, jsEvent: jsEvent }); } ngOnDestroy() { super.destroy(); } getRowInitialValue() { return [{ classList: '', label: '', prefix: '', suffix: '', value: '', verticalAlign: 'center', horizontalAlign: 'center', columns: ADCStaticValues.getHoursOfDay().map((hour, hourIndex) => { return { verticalAlign: 'center', horizontalAlign: 'center', selectable: false, label: hour, prefix: '', suffix: '', value: hour, classList: '' }; }) }]; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCDayViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ADCDayViewComponent, selector: "adc-day-view", usesInheritance: true, ngImport: i0, template: "\r\n<adc-table\r\n[rows]=\"rows\"\r\n[title]=\"title\"\r\n[titleClass]=\"''.concat(\r\n today == currentDate.split('T')[0] ? ' today ' : ' ',\r\n weekends.includes(day) || holidays.includes(currentDate.split('T')[0]) ? ' holiday ' : ' '\r\n)\"\r\n[selectionManager]=\"selectionManager\"\r\n[eventBuilder]=\"eventBuilder\"\r\n(viewReady)=\"markViewAsReady()\"\r\n></adc-table>\r\n\r\n", styles: [".w-full{width:100%}.w-auto{width:calc(100% - 120px)}.w-12{width:3rem}.border-collapse{border-collapse:collapse}.table-layout-fixed{table-layout:fixed}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0;height:0}.over-flow-hidden{overflow:hidden}\n"], dependencies: [{ kind: "component", type: i1.ADCTableComponent, selector: "adc-table", inputs: ["rows", "showRowDetails", "title", "titleClass", "eventBuilder", "selectionManager"], outputs: ["viewReady"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCDayViewComponent, decorators: [{ type: Component, args: [{ selector: 'adc-day-view', template: "\r\n<adc-table\r\n[rows]=\"rows\"\r\n[title]=\"title\"\r\n[titleClass]=\"''.concat(\r\n today == currentDate.split('T')[0] ? ' today ' : ' ',\r\n weekends.includes(day) || holidays.includes(currentDate.split('T')[0]) ? ' holiday ' : ' '\r\n)\"\r\n[selectionManager]=\"selectionManager\"\r\n[eventBuilder]=\"eventBuilder\"\r\n(viewReady)=\"markViewAsReady()\"\r\n></adc-table>\r\n\r\n", styles: [".w-full{width:100%}.w-auto{width:calc(100% - 120px)}.w-12{width:3rem}.border-collapse{border-collapse:collapse}.table-layout-fixed{table-layout:fixed}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0;height:0}.over-flow-hidden{overflow:hidden}\n"] }] }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjZGF5LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNhZGkvYW5ndWxhci1kYXRlLWNvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL2FkY2RheS12aWV3L2FkY2RheS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGNkYXktdmlldy9hZGNkYXktdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFDdkkscUNBQXFDLENBQUM7QUFFM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQU81RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBMEJ2RDtRQUVFLEtBQUssRUFBRSxDQUFDO1FBMUJWLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBRWhCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsZUFBVSxHQUFhLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2RCxlQUFVLEdBQWEsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZELGlCQUFZLEdBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU1RCxpQkFBWSxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUVo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QUUsSUFBSTt3QkFDWCxNQUFNLEVBQUUsRUFBRTt3QkFDVixNQUFNLEVBQUUsRUFBRTt3QkFDVixLQUFLLEVBQUUsSUFBSTt3QkFDWCxTQUFTLEVBQUUsRUFBRTtxQkFDZCxDQUFBO2dCQUNILENBQUMsQ0FBQzthQUNILENBQUMsQ0FBQztJQUNMLENBQUM7OEdBM1JVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDJFQ1hoQyx1WUFhQTs7MkZERmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFEQ0NvbW1vblNlcnZpY2UsIEFEQ0RhdGVTcGxpdHRlciwgQURDSVRhYmxlQ2VsbCwgQURDSVRhYmxlRXZlbnQsIEFEQ0lUYWJsZVJvdywgQURDU3RhdGljVmFsdWVzLCBGbGF0RXZlbnRCdWlsZGVyLCBUYWJsZVNlbGVjdGlvbiB9IFxyXG5mcm9tICdAYXNhZGkvYW5ndWxhci1kYXRlLWNvbXBvbmVudHMvY29yZSc7XHJcbmltcG9ydCB7IEFEQ0lTY2hlZHVsZXJEYXRlUmFuZ2VTZWxlY3RFdmVudCwgQURDSVNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlLmdsb2JhbCc7XHJcbmltcG9ydCB7IEFkY1NjaGVkdWxlckJhc2UgfSBmcm9tICcuLi9hZGMtc2NoZWR1bGVyLWJhc2UvYWRjLXNjaGVkdWxlci1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWRjLWRheS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRjZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkY2RheS12aWV3LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQURDRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIEFkY1NjaGVkdWxlckJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveXtcclxuXHJcbiAgeWVhcjogbnVtYmVyID0gMDtcclxuICB3ZWVrOiBudW1iZXIgPSAwO1xyXG4gIGRheTogbnVtYmVyID0gMDtcclxuXHJcbiAgY3VycmVudERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcclxuICBob3Vyc09mRGF5OiBzdHJpbmdbXSA9IEFEQ1N0YXRpY1ZhbHVlcy5nZXRIb3Vyc09mRGF5KCk7XHJcbiAgZGF5c09md2Vlazogc3RyaW5nW10gPSBBRENTdGF0aWNWYWx1ZXMuZ2V0RGF5c09mV2VlaygpO1xyXG4gIG1vbnRoc09mWWVhcjogc3RyaW5nW10gPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoc09mWWVhcigpO1xyXG5cclxuICBkYXRlU3BsaXR0ZXI6IEFEQ0RhdGVTcGxpdHRlciA9IHRoaXMuZGF0ZUZvcm1hdHRlci5EYXRlU3BsaXR0ZXI7XHJcblxyXG4gIGV2ZW50czogQURDSVNjaGVkdWxlckV2ZW50W10gPSBbXTtcclxuXHJcbiAgcm93czogQURDSVRhYmxlUm93W10gPSBbXTtcclxuXHJcbiAgd2Vla2VuZHM6IG51bWJlcltdID0gW107XHJcbiAgaG9saWRheXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHJlYWRvbmx5IHRvZGF5OiBzdHJpbmcgPSB0aGlzLmRhdGVBZGFwdGVyLnRvZGF5KCk7XHJcbiAgcmVhZG9ubHkgY29tbW9uU2VydmljZSA9IG5ldyBBRENDb21tb25TZXJ2aWNlKHRoaXMuZGF0ZUFkYXB0ZXIsIHRoaXMubGFiZWxzKTtcclxuICByZWFkb25seSBzZWxlY3Rpb25NYW5hZ2VyID0gbmV3IFRhYmxlU2VsZWN0aW9uKHRoaXMuZGF0ZUZpbHRlcik7XHJcbiAgcmVhZG9ubHkgZXZlbnRCdWlsZGVyID0gbmV3IEZsYXRFdmVudEJ1aWxkZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKVxyXG4gIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIFxyXG4gIHtcclxuICAgIHN1cGVyLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIuY2VsbFNlbGVjdGlvblN0cmVhbS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vbkRhdGVSYW5nZVNlbGVjdChldmVudC5zdGFydCwgZXZlbnQuZW5kKSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZXZlbnRTZWxlY3Rpb25TdHJlYW0uc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICB0aGlzLm9uRXZlbnRDbGljayhlLmV2ZW50LCBlLmRvbSwgZS5qc0V2ZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlcihjZWxsMTogQURDSVRhYmxlQ2VsbCwgY2VsbDI6IEFEQ0lUYWJsZUNlbGwpOiBib29sZWFuXHJcbiAge1xyXG4gICAgcmV0dXJuIChjZWxsMi5yb3dWYWx1ZSA9PSBjZWxsMS5yb3dWYWx1ZSAmJiBjZWxsMi5jb2x1bW5WYWx1ZSA+PSBjZWxsMS5jb2x1bW5WYWx1ZSkgfHwgKGNlbGwyLnJvd1ZhbHVlID4gY2VsbDEucm93VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgaW5pdFZpZXdIYW5sZGVyKCk6IHZvaWQgXHJcbiAge1xyXG4gICAgaWYodGhpcy5zdGFydE9mID09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMudG9kYXlCdXR0b25IYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXlJbmRleE9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0V2Vla09mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhck9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvZGF5QnV0dG9uSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXkgPSB0aGlzLmRhdGVBZGFwdGVyLmdldEN1cnJlbnREYXkoKTtcclxuICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFdlZWsoKTtcclxuICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFllYXIoKTtcclxuXHJcbiAgICB0aGlzLmNhbGN1bGF0ZUN1cnJlbnREYXRlKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBwcmV2aW91c0J1dHRvbkhhbmRsZXIoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF5LS07XHJcbiAgICBpZih0aGlzLmRheSA8IDApXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF5ID0gNjtcclxuICAgICAgdGhpcy53ZWVrLS07XHJcblxyXG4gICAgICBpZih0aGlzLndlZWsgPCAxKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy55ZWFyLS07XHJcbiAgICAgICAgdGhpcy53ZWVrID0gdGhpcy5kYXRlQWRhcHRlci5nZXRXZWVrc09mWWVhcih0aGlzLnllYXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVDdXJyZW50RGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmV4dEJ1dHRvbkhhbmRsZXIoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF5Kys7XHJcbiAgICBpZih0aGlzLmRheSA+IDYpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF5ID0gMDtcclxuICAgICAgdGhpcy53ZWVrKys7XHJcblxyXG4gICAgICBjb25zdCB3ZWVrc09mWWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0V2Vla3NPZlllYXIodGhpcy55ZWFyKTtcclxuXHJcbiAgICAgIGlmKHRoaXMud2VlayA+IHdlZWtzT2ZZZWFyKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy53ZWVrID0gMTtcclxuICAgICAgICB0aGlzLnllYXIrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUN1cnJlbnREYXRlKCk6IHZvaWRcclxuICB7XHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlT2ZEYXkodGhpcy55ZWFyLCB0aGlzLndlZWssIHRoaXMuZGF5KTtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnRyYW5zZm9ybURhdGUoK2RhdGUuc3BsaXQodGhpcy5kYXRlU3BsaXR0ZXIpWzBdLCArZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMV0sICtkYXRlLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKVsyXSk7XHJcblxyXG4gICAgY29uc3QgZGF5OiBzdHJpbmcgPSB0aGlzLmxhYmVscz8uZGF5c09mV2Vla1t0aGlzLmNvbW1vblNlcnZpY2UuZ2V0RGF5SW5kZXgodGhpcy5kYXkpXSB8fCB0aGlzLmRheXNPZndlZWtbdGhpcy5kYXldO1xyXG4gICAgY29uc3QgbW9udGggPSAgdGhpcy5tb250aHNPZlllYXJbK2RhdGUuc3BsaXQodGhpcy5kYXRlU3BsaXR0ZXIpWzFdIC0gMV07XHJcblxyXG4gICAgdGhpcy50aXRsZSA9IGAke2RheX0gXHJcbiAgICAkeytkYXRlLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKVsyXX0gXHJcbiAgICAke3RoaXMuY29tbW9uU2VydmljZS5nZXRNb250aE5hbWUobW9udGgpIHx8IG1vbnRofSAke3RoaXMubGFiZWxzPy55ZWFyIHx8IFwiWWVhclwifSBcclxuICAgICR7dGhpcy55ZWFyfWA7XHJcblxyXG4gICAgdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICAgIHN1cGVyLmRhdGVSYW5nZUNoYW5nZSh7c3RhcnREYXRlOiB0aGlzLmN1cnJlbnREYXRlLCBlbmREYXRlOiB0aGlzLmN1cnJlbnREYXRlfSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBldmVudENoYW5nZXNIYW5kbGVyKHNjaGVkdWxlckV2ZW50czogQURDSVNjaGVkdWxlckV2ZW50W10pOiB2b2lkXHJcbiAge1xyXG4gICAgY29uc3QgdGFibGVFdmVudHM6IEFEQ0lUYWJsZUV2ZW50W10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmV2ZW50cyA9IHNjaGVkdWxlckV2ZW50cztcclxuXHJcbiAgICBjb25zdCB2aWV3RXZlbnRzID0gdGhpcy50b29scy5zY2hlZHVsZXIuZ2V0RXZlbnRzQmV0d2VlbkRhdGVSYW5nZSh0aGlzLmN1cnJlbnREYXRlLCB0aGlzLmN1cnJlbnREYXRlLCB0aGlzLmV2ZW50cyk7XHJcbiAgICBcclxuICAgIHZpZXdFdmVudHMuZm9yRWFjaCgoZTogQURDSVNjaGVkdWxlckV2ZW50KSA9PiB7XHJcblxyXG5cclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzWzFdO1xyXG5cclxuICAgICAgY29uc3Qgcm93RGF0ZSA9IHRoaXMudG9vbHMuZGF0ZVRpbWUuZGF0ZU9ubHkocm93LnZhbHVlKTtcclxuICAgICAgY29uc3QgZXZlbnRTdGFydERhdGUgPSB0aGlzLnRvb2xzLmRhdGVUaW1lLmRhdGVPbmx5KGUuc3RhcnREYXRlKTtcclxuICAgICAgY29uc3QgZXZlbnRFbmREYXRlID0gdGhpcy50b29scy5kYXRlVGltZS5kYXRlT25seShlLmVuZERhdGUpO1xyXG4gICAgICBjb25zdCBldmVudFN0YXJ0SG91ciA9IHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91ck9yRGVmYXVsdChlLnN0YXJ0VGltZSwgJzAwJyk7XHJcbiAgICAgIGNvbnN0IGV2ZW50RW5kSG91ciA9IHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91ck9yRGVmYXVsdChlLmVuZFRpbWUsICcyMycpO1xyXG5cclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0Q29sdW1uSW5kZXggPSBldmVudFN0YXJ0RGF0ZSAhPSByb3dEYXRlID8gLTEgOiByb3cuY29sdW1ucy5maW5kSW5kZXgoYyA9PiB7XHJcbiAgICAgICAgcmV0dXJuICB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXIoYy52YWx1ZSkgPT0gZXZlbnRTdGFydEhvdXJcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBlbmRDb2x1bW5JbmRleCA9IGV2ZW50RW5kRGF0ZSAhPSByb3dEYXRlID8gLTEgOiByb3cuY29sdW1ucy5maW5kSW5kZXgoYyA9PiB7XHJcbiAgICAgICAgcmV0dXJuICB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXIoYy52YWx1ZSkgPT0gZXZlbnRFbmRIb3VyXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gK3RoaXMudG9vbHMuZGF0ZVRpbWUubWludXRlc09yRGVmYXVsdChlLnN0YXJ0VGltZSwgJzAwJyk7XHJcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSArdGhpcy50b29scy5kYXRlVGltZS5taW51dGVzT3JEZWZhdWx0KGUuZW5kVGltZSwgJzYwJyk7XHJcblxyXG4gICAgICBjb25zdCBjZWxsRXZlbnQ6IEFEQ0lUYWJsZUV2ZW50ID0ge1xyXG4gICAgICAgIGNvbHVtblN0YXJ0OiBzdGFydENvbHVtbkluZGV4ICE9IC0xID8gc3RhcnRDb2x1bW5JbmRleCA6IG51bGwsXHJcbiAgICAgICAgY29sdW1uRW5kOiBlbmRDb2x1bW5JbmRleCAhPSAtMSA/IGVuZENvbHVtbkluZGV4IDogbnVsbCxcclxuICAgICAgICBkYXRhOiBlLFxyXG4gICAgICAgIHJvd1N0YXJ0OiAxLFxyXG4gICAgICAgIHJvd0VuZDogMSxcclxuICAgICAgICBvZmZzZXRYOiBzdGFydFRpbWUgLyA2MCxcclxuICAgICAgICBmcmFjdGlvblg6IGVuZFRpbWUgLyA2MCxcclxuICAgICAgICBvdmVybGFwVG9sZXJhbmNlOiB0aGlzLm9wdGlvbnMuZXZlbnRPdmVybGFwVG9sZXJhbmNlIC8gNjBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmKGUuYWxsRGF5ID09IHRydWUpXHJcbiAgICAgIHtcclxuICAgICAgICBjb25zdCBldmVudEhvdXJFbmQgPSArdGhpcy50b29scy5kYXRlVGltZS5ob3VyT3JEZWZhdWx0KGUuZW5kVGltZSwgJzIzJyk7XHJcblxyXG4gICAgICAgIGNlbGxFdmVudC5mcmFjdGlvblggPSAyNCAtIGV2ZW50SG91ckVuZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGFibGVFdmVudHMucHVzaChjZWxsRXZlbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZGF0YSA9IHRhYmxlRXZlbnRzO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUNoYW5nZXNIYW5kbGVyKCk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmdldFJvd0luaXRpYWxWYWx1ZSgpO1xyXG5cclxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGVPZkRheSh0aGlzLnllYXIsIHRoaXMud2VlaywgdGhpcy5kYXkpO1xyXG4gICAgY29uc3Qgc3BsaXR0ZWREYXRlID0gZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcik7XHJcbiAgICBcclxuICAgIGNvbnN0IGRheUluZGV4ID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldERheUluZGV4KHRoaXMuZGF5KTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1EYXRlID0gdGhpcy5kYXRlQWRhcHRlci50cmFuc2Zvcm1EYXRlKCtzcGxpdHRlZERhdGVbMF0sICtzcGxpdHRlZERhdGVbMV0sICtzcGxpdHRlZERhdGVbMl0pO1xyXG5cclxuICAgIGNvbnN0IHJvdzogQURDSVRhYmxlUm93ID0ge1xyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbHM/LmRheXNPZldlZWtbZGF5SW5kZXhdIHx8IHRoaXMuZGF5c09md2Vla1tkYXlJbmRleF0sXHJcbiAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICBzdWZmaXg6IGAke3NwbGl0dGVkRGF0ZVswXX0ke3RoaXMuZGF0ZVNwbGl0dGVyfSR7c3BsaXR0ZWREYXRlWzFdfSR7dGhpcy5kYXRlU3BsaXR0ZXJ9JHtzcGxpdHRlZERhdGVbMl19YCxcclxuICAgICAgdmFsdWU6IHRyYW5zZm9ybURhdGUuc3BsaXQoJ1QnKVswXSxcclxuICAgICAgY2xhc3NMaXN0OiAnJy5jb25jYXQoXHJcbiAgICAgICAgICAgIHRoaXMud2Vla2VuZHMuaW5jbHVkZXModGhpcy5kYXkpIHx8IHRoaXMuaG9saWRheXMuaW5jbHVkZXModGhpcy5jdXJyZW50RGF0ZS5zcGxpdCgnVCcpWzBdKSA/ICcgaG9saWRheSAnIDogJyAnLFxyXG4gICAgICAgICAgKSxcclxuICAgICAgY29sdW1uczogW11cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhvdXJzT2ZEYXkuZm9yRWFjaCgoaG91cikgPT4ge1xyXG5cclxuICAgICAgcm93LmNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgdmVydGljYWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgc3VmZml4OiAnJyxcclxuICAgICAgICB2YWx1ZTogaG91cixcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3dzLnB1c2gocm93KTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdlZWtlbmRzQ2hhbmdlc0hhbmRsZXIod2Vla2VuZHM6IG51bWJlcltdKTogdm9pZCBcclxuICB7XHJcbiAgICB0aGlzLndlZWtlbmRzID0gd2Vla2VuZHM7XHJcbiAgICB0aGlzLmRhdGVDaGFuZ2VzSGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgaG9saWRheXNDaGFuZ2VzSGFuZGxlcihob2xpZGF5czogc3RyaW5nW10pOiB2b2lkIFxyXG4gIHtcclxuICAgIHRoaXMuaG9saWRheXMgPSBob2xpZGF5cztcclxuICAgIHRoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVSYW5nZVNlbGVjdChzdGFydDogQURDSVRhYmxlQ2VsbCwgZW5kOiBBRENJVGFibGVDZWxsKTogdm9pZFxyXG4gIHtcclxuICAgIGNvbnN0IGU6IEFEQ0lTY2hlZHVsZXJEYXRlUmFuZ2VTZWxlY3RFdmVudCA9IFxyXG4gICAge1xyXG4gICAgICBlbmREYXRlOiBlbmQucm93VmFsdWUuc3BsaXQoJ1QnKVswXSxcclxuICAgICAgZW5kVGltZTogZW5kLmNvbHVtblZhbHVlLFxyXG4gICAgICBzdGFydERhdGU6IHN0YXJ0LnJvd1ZhbHVlLnNwbGl0KCdUJylbMF0sXHJcbiAgICAgIHN0YXJ0VGltZTogc3RhcnQuY29sdW1uVmFsdWUsXHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuZGF0ZVJhbmdlU2VsZWN0KGUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25FdmVudENsaWNrKGV2ZW50OiBBRENJVGFibGVFdmVudCwgZG9tOiBIVE1MRWxlbWVudCwganNFdmVudDogTW91c2VFdmVudCk6IHZvaWQgXHJcbiAge1xyXG4gICAgY29uc3Qgc2NoZWR1bGVyRXZlbnQ6IEFEQ0lTY2hlZHVsZXJFdmVudCA9IHRoaXMuZXZlbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgPT0gZXZlbnQuZGF0YS5pZClbMF07XHJcblxyXG4gICAgc3VwZXIuZXZlbnRDbGljayh7ZG9tOiBkb20sIGV2ZW50OiBzY2hlZHVsZXJFdmVudCwganNFdmVudDoganNFdmVudH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCBcclxuICB7XHJcbiAgICBzdXBlci5kZXN0cm95KCk7ICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93SW5pdGlhbFZhbHVlKCk6IEFEQ0lUYWJsZVJvd1tdXHJcbiAge1xyXG4gICAgcmV0dXJuIFt7XHJcbiAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgc3VmZml4OiAnJyxcclxuICAgICAgdmFsdWU6ICcnLFxyXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgaG9yaXpvbnRhbEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgY29sdW1uczogQURDU3RhdGljVmFsdWVzLmdldEhvdXJzT2ZEYXkoKS5tYXAoKGhvdXI6IHN0cmluZywgaG91ckluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdmVydGljYWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBsYWJlbDogaG91cixcclxuICAgICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICAgICAgdmFsdWU6IGhvdXIsXHJcbiAgICAgICAgICBjbGFzc0xpc3Q6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfV07XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48YWRjLXRhYmxlXHJcbltyb3dzXT1cInJvd3NcIlxyXG5bdGl0bGVdPVwidGl0bGVcIlxyXG5bdGl0bGVDbGFzc109XCInJy5jb25jYXQoXHJcbiAgICB0b2RheSA9PSBjdXJyZW50RGF0ZS5zcGxpdCgnVCcpWzBdID8gJyB0b2RheSAnIDogJyAnLFxyXG4gICAgd2Vla2VuZHMuaW5jbHVkZXMoZGF5KSB8fCBob2xpZGF5cy5pbmNsdWRlcyhjdXJyZW50RGF0ZS5zcGxpdCgnVCcpWzBdKSA/ICcgaG9saWRheSAnIDogJyAnXHJcbilcIlxyXG5bc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuW2V2ZW50QnVpbGRlcl09XCJldmVudEJ1aWxkZXJcIlxyXG4odmlld1JlYWR5KT1cIm1hcmtWaWV3QXNSZWFkeSgpXCJcclxuPjwvYWRjLXRhYmxlPlxyXG5cclxuIl19