@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
231 lines • 39.4 kB
JavaScript
import { Component } from '@angular/core';
import { ADCCommonService, ADCStaticValues, FlatEventBuilder, TableSelection } from '@asadi/angular-date-components/core';
import { AdcResourceSchedulerBase } from '../adc-resource-scheduler-base/adc-resource-scheduler-base';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@asadi/angular-date-components/core";
export class ADCDayViewComponent extends AdcResourceSchedulerBase {
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.resources = [];
this.events = [];
this.rows = [];
this.weekends = [];
this.holidays = [];
this.commonService = new ADCCommonService(this.dateAdapter, this.labels);
this.today = this.dateAdapter.today();
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 cell1.rowValue == cell2.rowValue && cell2.columnValue >= cell1.columnValue;
}
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 dayIndex = this.commonService.getDayIndex(this.day);
const month = this.monthsOfYear[+date.split(this.dateSplitter)[1] - 1];
this.title = `${this.labels?.daysOfWeek[dayIndex] || this.daysOfweek[dayIndex]}
${+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(events) {
const tableEvents = [];
this.events = events;
const viewEvents = this.tools.resourceScheduler.getEventsBetweenDateRange(this.currentDate, this.currentDate, this.events);
viewEvents.forEach((e) => {
const rowIndex = this.rows.findIndex((r) => r.value == e.resourceId);
if (rowIndex == -1)
return;
const row = this.rows[rowIndex];
const startColumnIndex = row.columns.findIndex((c) => {
const time = this.tools.dateTime.timeOnly(c.value);
const date = this.tools.dateTime.dateOnly(c.value);
return date == this.tools.dateTime.dateOnly(e.startDate) &&
this.tools.dateTime.hour(time) == this.tools.dateTime.hourOrDefault(e.startTime, '00');
});
const endColumnIndex = row.columns.findIndex((c) => {
const time = this.tools.dateTime.timeOnly(c.value);
const date = this.tools.dateTime.dateOnly(c.value);
return date == this.tools.dateTime.dateOnly(e.endDate) &&
this.tools.dateTime.hour(time) == this.tools.dateTime.hourOrDefault(e.endTime, '23');
});
const startTime = +this.tools.dateTime.minutesOrDefault(e.startTime, '00');
const endTime = +this.tools.dateTime.minutesOrDefault(e.endTime, '60');
const currentDateOnly = this.tools.dateTime.dateOnly(this.currentDate);
const cellEvent = {
columnStart: startColumnIndex != -1 ? startColumnIndex : null,
columnEnd: endColumnIndex != -1 ? endColumnIndex : null,
data: e,
rowStart: rowIndex,
rowEnd: rowIndex,
offsetX: this.tools.dateTime.dateOnly(e.startDate) == currentDateOnly ? startTime / 60 : 0,
fractionX: endTime / 60,
overlapTolerance: this.options.eventOverlapTolerance / 60
};
if (e.allDay == true) {
const eventHourEnd = +this.tools.dateTime.hourOrDefault(e.endTime, '23');
const eventMinuteEnd = +this.tools.dateTime.minutesOrDefault(e.endTime, '00');
cellEvent.fractionX = 24 - eventHourEnd + (eventMinuteEnd / 60);
}
tableEvents.push(cellEvent);
});
this.eventBuilder.data = tableEvents;
}
resourceChangesHandler(resources) {
this.resources = resources;
this.dateChangesHandler();
}
dateChangesHandler() {
this.rows = this.getRowInitialValue();
if (this.resources.length == 0)
return;
const date = this.dateAdapter.getDateOfDay(this.year, this.week, this.day).split(this.dateSplitter);
const transformedDate = this.dateAdapter.transformDate(+date[0], +date[1], +date[2]).split('T')[0];
this.resources.forEach((resource, rowIndex) => {
const row = {
classList: '',
label: resource.title,
prefix: '',
suffix: '',
value: resource.id.toString(),
verticalAlign: 'center',
horizontalAlign: 'center',
columns: [],
};
this.hoursOfDay.forEach((hour) => {
const column = {
classList: '',
label: '',
prefix: '',
suffix: '',
value: `${transformedDate}T${hour}`,
verticalAlign: 'center',
horizontalAlign: 'center',
selectable: true,
};
row.columns.push(column);
});
this.rows.push(row);
});
}
holidaysChangesHandler(holidays) {
this.holidays = holidays;
this.dateChangesHandler();
}
weekendChangesHandler(weekends) {
this.weekends = weekends;
this.dateChangesHandler();
}
onDateRangeSelect(start, end) {
const e = {
endDate: end.columnValue.split('T')[0],
endTime: end.columnValue.split('T')[1],
startDate: start.columnValue.split('T')[0],
startTime: start.columnValue.split('T')[1],
resourceId: start.rowValue
};
super.dateRangeSelect(e);
}
onEventClick(event, dom, jsEvent) {
const resourceSchedulerEvent = this.events.filter(item => item.id == event.data.id)[0];
super.eventClick({ dom: dom, jsEvent: jsEvent, event: resourceSchedulerEvent });
}
ngOnDestroy() {
super.destory();
}
getRowInitialValue() {
const row = {
verticalAlign: 'center',
horizontalAlign: 'center',
classList: '',
columns: [],
label: '',
prefix: '',
suffix: '',
value: '',
};
this.hoursOfDay.forEach((hour) => {
const column = {
classList: '',
label: hour,
prefix: '',
suffix: '',
value: hour,
verticalAlign: 'center',
horizontalAlign: 'center',
selectable: false,
};
row.columns.push(column);
});
return [row];
}
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: "<ng-container *ngIf=\"resources.length != 0\">\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</ng-container>", styles: [".w-full{width:100%}.table-layout-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0}.h-1152{height:1152px}.over-flow-hidden{overflow:hidden}table{border-spacing:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.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: "<ng-container *ngIf=\"resources.length != 0\">\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</ng-container>", styles: [".w-full{width:100%}.table-layout-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0}.h-1152{height:1152px}.over-flow-hidden{overflow:hidden}table{border-spacing:0}\n"] }]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtZGF5LXZpZXcvYWRjLWRheS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtZGF5LXZpZXcvYWRjLWRheS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBOEYsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXROLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDOzs7O0FBT3RHLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSx3QkFBd0I7SUE2Qi9EO1FBR0UsS0FBSyxFQUFFLENBQUM7UUE3QlYsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFFaEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixlQUFVLEdBQWEsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBYSxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkQsaUJBQVksR0FBYSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELGlCQUFZLEdBQW9CLElBQUksQ0FBQyxh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LENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsV0FBVztRQUVULEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCO1FBRXhCLE1BQU0sR0FBRyxHQUFpQjtZQUN4QixhQUFhLEVBQUUsUUFBUTtZQUN2QixlQUFlLEVBQUUsUUFBUTtZQUN6QixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUV2QyxNQUFNLE1BQU0sR0FDWjtnQkFDRSxTQUFTLEVBQUUsRUFBRTtnQkFDYixLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixNQUFNLEVBQUUsRUFBRTtnQkFDVixLQUFLLEVBQUUsSUFBSTtnQkFDWCxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLFVBQVUsRUFBRSxLQUFLO2FBQ2xCLENBQUE7WUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUlILE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7OEdBdlRVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDJFQ1ZoQyw0ZUFZZTs7MkZERkYsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQURDQ29tbW9uU2VydmljZSwgQURDRGF0ZVNwbGl0dGVyLCBBRENJT3B0aW9ucywgQURDSVRhYmxlQ2VsbCwgQURDSVRhYmxlQ29sdW1uLCBBRENJVGFibGVFdmVudCwgQURDSVRhYmxlUm93LCBBRENTdGF0aWNWYWx1ZXMsIEZsYXRFdmVudEJ1aWxkZXIsIFRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCwgQURDSVJlc291cmNlU2NoZWR1bGVyUmVzb3VyY2UsIEFEQ0lSZXNvdXJjZVNjaGVkdWxlclRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlLmdsb2JhbFwiO1xyXG5pbXBvcnQgeyBBZGNSZXNvdXJjZVNjaGVkdWxlckJhc2UgfSBmcm9tICcuLi9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLWJhc2UvYWRjLXJlc291cmNlLXNjaGVkdWxlci1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWRjLWRheS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRjLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGMtZGF5LXZpZXcuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBRENEYXlWaWV3Q29tcG9uZW50IGV4dGVuZHMgQWRjUmVzb3VyY2VTY2hlZHVsZXJCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kgXHJcbntcclxuXHJcbiAgeWVhcjogbnVtYmVyID0gMDtcclxuICB3ZWVrOiBudW1iZXIgPSAwO1xyXG4gIGRheTogbnVtYmVyID0gMDtcclxuXHJcbiAgY3VycmVudERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgaG91cnNPZkRheTogc3RyaW5nW10gPSBBRENTdGF0aWNWYWx1ZXMuZ2V0SG91cnNPZkRheSgpO1xyXG4gIGRheXNPZndlZWs6IHN0cmluZ1tdID0gQURDU3RhdGljVmFsdWVzLmdldERheXNPZldlZWsoKTtcclxuICBtb250aHNPZlllYXI6IHN0cmluZ1tdID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aHNPZlllYXIoKTtcclxuXHJcbiAgZGF0ZVNwbGl0dGVyOiBBRENEYXRlU3BsaXR0ZXIgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuRGF0ZVNwbGl0dGVyO1xyXG5cclxuICByZXNvdXJjZXM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclJlc291cmNlW10gPSBbXTtcclxuICBldmVudHM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50W10gPSBbXTtcclxuXHJcbiAgcm93czogQURDSVRhYmxlUm93W10gPSBbXTtcclxuXHJcbiAgd2Vla2VuZHM6IG51bWJlcltdID0gW107XHJcbiAgaG9saWRheXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHJlYWRvbmx5IGNvbW1vblNlcnZpY2UgPSBuZXcgQURDQ29tbW9uU2VydmljZSh0aGlzLmRhdGVBZGFwdGVyLCB0aGlzLmxhYmVscyk7XHJcbiAgcmVhZG9ubHkgdG9kYXk6IHN0cmluZyA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKTtcclxuICByZWFkb25seSBzZWxlY3Rpb25NYW5hZ2VyID0gbmV3IFRhYmxlU2VsZWN0aW9uKHRoaXMuZGF0ZUZpbHRlcik7XHJcbiAgcmVhZG9ubHkgZXZlbnRCdWlsZGVyID0gbmV3IEZsYXRFdmVudEJ1aWxkZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgKVxyXG4gIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIFxyXG4gIHtcclxuICAgIHN1cGVyLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIuY2VsbFNlbGVjdGlvblN0cmVhbS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vbkRhdGVSYW5nZVNlbGVjdChldmVudC5zdGFydCwgZXZlbnQuZW5kKSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZXZlbnRTZWxlY3Rpb25TdHJlYW0uc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICB0aGlzLm9uRXZlbnRDbGljayhlLmV2ZW50LCBlLmRvbSwgZS5qc0V2ZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlcihjZWxsMTogQURDSVRhYmxlQ2VsbCwgY2VsbDI6IEFEQ0lUYWJsZUNlbGwpOiBib29sZWFuXHJcbiAge1xyXG4gICAgcmV0dXJuIGNlbGwxLnJvd1ZhbHVlID09IGNlbGwyLnJvd1ZhbHVlICYmIGNlbGwyLmNvbHVtblZhbHVlID49IGNlbGwxLmNvbHVtblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgaW5pdFZpZXdIYW5sZGVyKCk6IHZvaWQgXHJcbiAge1xyXG4gICAgaWYodGhpcy5zdGFydE9mID09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMudG9kYXlCdXR0b25IYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXlJbmRleE9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0V2Vla09mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhck9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvZGF5QnV0dG9uSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXkgPSB0aGlzLmRhdGVBZGFwdGVyLmdldEN1cnJlbnREYXkoKTtcclxuICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFdlZWsoKTtcclxuICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFllYXIoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHByZXZpb3VzQnV0dG9uSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXktLTtcclxuICAgIGlmKHRoaXMuZGF5IDwgMClcclxuICAgIHtcclxuICAgICAgdGhpcy5kYXkgPSA2O1xyXG4gICAgICB0aGlzLndlZWstLTtcclxuXHJcbiAgICAgIGlmKHRoaXMud2VlayA8IDEpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnllYXItLTtcclxuICAgICAgICB0aGlzLndlZWsgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFdlZWtzT2ZZZWFyKHRoaXMueWVhcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5leHRCdXR0b25IYW5kbGVyKCk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLmRheSsrO1xyXG4gICAgaWYodGhpcy5kYXkgPiA2KVxyXG4gICAge1xyXG4gICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgIHRoaXMud2VlaysrO1xyXG5cclxuICAgICAgY29uc3Qgd2Vla3NPZlllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFdlZWtzT2ZZZWFyKHRoaXMueWVhcik7XHJcblxyXG4gICAgICBpZih0aGlzLndlZWsgPiB3ZWVrc09mWWVhcilcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMud2VlayA9IDE7XHJcbiAgICAgICAgdGhpcy55ZWFyKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUN1cnJlbnREYXRlKCk6IHZvaWRcclxuICB7XHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlT2ZEYXkodGhpcy55ZWFyLCB0aGlzLndlZWssIHRoaXMuZGF5KTtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnRyYW5zZm9ybURhdGUoK2RhdGUuc3BsaXQodGhpcy5kYXRlU3BsaXR0ZXIpWzBdLCArZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMV0sICtkYXRlLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKVsyXSk7XHJcblxyXG4gICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0RGF5SW5kZXgodGhpcy5kYXkpO1xyXG4gICAgY29uc3QgbW9udGggPSB0aGlzLm1vbnRoc09mWWVhclsrZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMV0gLSAxXTtcclxuXHJcbiAgICB0aGlzLnRpdGxlID0gYCR7dGhpcy5sYWJlbHM/LmRheXNPZldlZWtbZGF5SW5kZXhdIHx8IHRoaXMuZGF5c09md2Vla1tkYXlJbmRleF19IFxyXG4gICAgJHsrZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMl19IFxyXG4gICAgJHt0aGlzLmNvbW1vblNlcnZpY2UuZ2V0TW9udGhOYW1lKG1vbnRoKSB8fCBtb250aH0gJHt0aGlzLmxhYmVscz8ueWVhciB8fCBcIlllYXJcIn0gXHJcbiAgICAke3RoaXMueWVhcn1gO1xyXG5cclxuICAgIHRoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgICBzdXBlci5kYXRlUmFuZ2VDaGFuZ2Uoe3N0YXJ0RGF0ZTogdGhpcy5jdXJyZW50RGF0ZSwgZW5kRGF0ZTogdGhpcy5jdXJyZW50RGF0ZX0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgZXZlbnRDaGFuZ2VzSGFuZGxlcihldmVudHM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50W10pOiB2b2lkXHJcbiAge1xyXG4gICAgY29uc3QgdGFibGVFdmVudHM6IEFEQ0lUYWJsZUV2ZW50W10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcclxuXHJcbiAgICBjb25zdCB2aWV3RXZlbnRzID0gdGhpcy50b29scy5yZXNvdXJjZVNjaGVkdWxlci5nZXRFdmVudHNCZXR3ZWVuRGF0ZVJhbmdlKHRoaXMuY3VycmVudERhdGUsIHRoaXMuY3VycmVudERhdGUsIHRoaXMuZXZlbnRzKTtcclxuICAgIFxyXG4gICAgdmlld0V2ZW50cy5mb3JFYWNoKChlOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCkgPT4ge1xyXG5cclxuICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KChyOiBBRENJVGFibGVSb3cpID0+IHIudmFsdWUgPT0gZS5yZXNvdXJjZUlkKTtcclxuXHJcbiAgICAgIGlmKHJvd0luZGV4ID09IC0xKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3Nbcm93SW5kZXhdO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnRDb2x1bW5JbmRleCA9IHJvdy5jb2x1bW5zLmZpbmRJbmRleCgoYzogQURDSVRhYmxlQ29sdW1uKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnRvb2xzLmRhdGVUaW1lLnRpbWVPbmx5KGMudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnRvb2xzLmRhdGVUaW1lLmRhdGVPbmx5KGMudmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0ZSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmRhdGVPbmx5KGUuc3RhcnREYXRlKSAmJlxyXG4gICAgICAgIHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91cih0aW1lKSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXJPckRlZmF1bHQoZS5zdGFydFRpbWUsICcwMCcpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGVuZENvbHVtbkluZGV4ID0gcm93LmNvbHVtbnMuZmluZEluZGV4KChjOiBBRENJVGFibGVDb2x1bW4pID0+IHtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy50b29scy5kYXRlVGltZS50aW1lT25seShjLnZhbHVlKTtcclxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy50b29scy5kYXRlVGltZS5kYXRlT25seShjLnZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGUgPT0gdGhpcy50b29scy5kYXRlVGltZS5kYXRlT25seShlLmVuZERhdGUpICYmIFxyXG4gICAgICAgIHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91cih0aW1lKSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXJPckRlZmF1bHQoZS5lbmRUaW1lLCAnMjMnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydFRpbWUgPSArdGhpcy50b29scy5kYXRlVGltZS5taW51dGVzT3JEZWZhdWx0KGUuc3RhcnRUaW1lLCAnMDAnKTtcclxuICAgICAgY29uc3QgZW5kVGltZSA9ICt0aGlzLnRvb2xzLmRhdGVUaW1lLm1pbnV0ZXNPckRlZmF1bHQoZS5lbmRUaW1lLCAnNjAnKTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlT25seSA9IHRoaXMudG9vbHMuZGF0ZVRpbWUuZGF0ZU9ubHkodGhpcy5jdXJyZW50RGF0ZSk7XHJcblxyXG4gICAgICBjb25zdCBjZWxsRXZlbnQ6IEFEQ0lUYWJsZUV2ZW50ID0ge1xyXG4gICAgICAgIGNvbHVtblN0YXJ0OiBzdGFydENvbHVtbkluZGV4ICE9IC0xID8gc3RhcnRDb2x1bW5JbmRleCA6IG51bGwsXHJcbiAgICAgICAgY29sdW1uRW5kOiBlbmRDb2x1bW5JbmRleCAhPSAtMSA/IGVuZENvbHVtbkluZGV4IDogbnVsbCxcclxuICAgICAgICBkYXRhOiBlLFxyXG4gICAgICAgIHJvd1N0YXJ0OiByb3dJbmRleCxcclxuICAgICAgICByb3dFbmQ6IHJvd0luZGV4LFxyXG4gICAgICAgIG9mZnNldFg6IHRoaXMudG9vbHMuZGF0ZVRpbWUuZGF0ZU9ubHkoZS5zdGFydERhdGUpID09IGN1cnJlbnREYXRlT25seSA/IHN0YXJ0VGltZSAvIDYwIDogMCxcclxuICAgICAgICBmcmFjdGlvblg6IGVuZFRpbWUgLyA2MCxcclxuICAgICAgICBvdmVybGFwVG9sZXJhbmNlOiB0aGlzLm9wdGlvbnMuZXZlbnRPdmVybGFwVG9sZXJhbmNlIC8gNjBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmKGUuYWxsRGF5ID09IHRydWUpXHJcbiAgICAgIHtcclxuICAgICAgICBjb25zdCBldmVudEhvdXJFbmQgPSArdGhpcy50b29scy5kYXRlVGltZS5ob3VyT3JEZWZhdWx0KGUuZW5kVGltZSwgJzIzJyk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRNaW51dGVFbmQgPSArdGhpcy50b29scy5kYXRlVGltZS5taW51dGVzT3JEZWZhdWx0KGUuZW5kVGltZSwgJzAwJyk7XHJcblxyXG4gICAgICAgIGNlbGxFdmVudC5mcmFjdGlvblggPSAyNCAtIGV2ZW50SG91ckVuZCArIChldmVudE1pbnV0ZUVuZCAvIDYwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGFibGVFdmVudHMucHVzaChjZWxsRXZlbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZGF0YSA9IHRhYmxlRXZlbnRzO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgcmVzb3VyY2VDaGFuZ2VzSGFuZGxlcihyZXNvdXJjZXM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclJlc291cmNlW10pOiB2b2lkIFxyXG4gIHtcclxuICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIGRhdGVDaGFuZ2VzSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yb3dzID0gdGhpcy5nZXRSb3dJbml0aWFsVmFsdWUoKTtcclxuXHJcbiAgICBpZih0aGlzLnJlc291cmNlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGVPZkRheSh0aGlzLnllYXIsIHRoaXMud2VlaywgdGhpcy5kYXkpLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKTtcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIudHJhbnNmb3JtRGF0ZSgrZGF0ZVswXSwgK2RhdGVbMV0sICtkYXRlWzJdKS5zcGxpdCgnVCcpWzBdO1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VzLmZvckVhY2goKHJlc291cmNlOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJSZXNvdXJjZSwgcm93SW5kZXg6IG51bWJlcikgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCByb3c6IEFEQ0lUYWJsZVJvdyA9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xhc3NMaXN0OiAnJyxcclxuICAgICAgICAgIGxhYmVsOiByZXNvdXJjZS50aXRsZSxcclxuICAgICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgIGhvcml6b250YWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaG91cnNPZkRheS5mb3JFYWNoKChob3VyOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgICBjb25zdCBjb2x1bW46IEFEQ0lUYWJsZUNvbHVtbiA9XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICAgICAgc3VmZml4OiAnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGAke3RyYW5zZm9ybWVkRGF0ZX1UJHtob3VyfWAsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICByb3cuY29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm93cy5wdXNoKHJvdyk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBob2xpZGF5c0NoYW5nZXNIYW5kbGVyKGhvbGlkYXlzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ob2xpZGF5cyA9IGhvbGlkYXlzO1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdlZWtlbmRDaGFuZ2VzSGFuZGxlcih3ZWVrZW5kczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMud2Vla2VuZHMgPSB3ZWVrZW5kcztcclxuICAgIHRoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVSYW5nZVNlbGVjdChzdGFydDogQURDSVRhYmxlQ2VsbCwgZW5kOiBBRENJVGFibGVDZWxsKTogdm9pZFxyXG4gIHtcclxuICAgIGNvbnN0IGU6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclRhYmxlRXZlbnQgPSBcclxuICAgIHtcclxuICAgICAgZW5kRGF0ZTogZW5kLmNvbHVtblZhbHVlLnNwbGl0KCdUJylbMF0sXHJcbiAgICAgIGVuZFRpbWU6IGVuZC5jb2x1bW5WYWx1ZS5zcGxpdCgnVCcpWzFdLFxyXG4gICAgICBzdGFydERhdGU6IHN0YXJ0LmNvbHVtblZhbHVlLnNwbGl0KCdUJylbMF0sXHJcbiAgICAgIHN0YXJ0VGltZTogc3RhcnQuY29sdW1uVmFsdWUuc3BsaXQoJ1QnKVsxXSxcclxuICAgICAgcmVzb3VyY2VJZDogc3RhcnQucm93VmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdXBlci5kYXRlUmFuZ2VTZWxlY3QoZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBvbkV2ZW50Q2xpY2soZXZlbnQ6IEFEQ0lUYWJsZUV2ZW50LCBkb206IEhUTUxFbGVtZW50LCBqc0V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCBcclxuICB7XHJcbiAgICBjb25zdCByZXNvdXJjZVNjaGVkdWxlckV2ZW50OiBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCA9IHRoaXMuZXZlbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgPT0gZXZlbnQuZGF0YS5pZClbMF07XHJcblxyXG4gICAgc3VwZXIuZXZlbnRDbGljayh7ZG9tOiBkb20sIGpzRXZlbnQ6IGpzRXZlbnQsIGV2ZW50OiByZXNvdXJjZVNjaGVkdWxlckV2ZW50fSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIFxyXG4gIHtcclxuICAgIHN1cGVyLmRlc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93SW5pdGlhbFZhbHVlKCk6IEFEQ0lUYWJsZVJvd1tdXHJcbiAge1xyXG4gICAgY29uc3Qgcm93OiBBRENJVGFibGVSb3cgPSB7XHJcbiAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBjbGFzc0xpc3Q6ICcnLFxyXG4gICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaG91cnNPZkRheS5mb3JFYWNoKChob3VyOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IGNvbHVtbjogQURDSVRhYmxlQ29sdW1uID1cclxuICAgICAge1xyXG4gICAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgICAgbGFiZWw6IGhvdXIsXHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICAgIHZhbHVlOiBob3VyLFxyXG4gICAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJvdy5jb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIFtyb3ddO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicmVzb3VyY2VzLmxlbmd0aCAhPSAwXCI+XHJcbiAgICA8YWRjLXRhYmxlXHJcbiAgICBbcm93c109XCJyb3dzXCJcclxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICBbdGl0bGVDbGFzc109XCInJy5jb25jYXQoXHJcbiAgICAgICAgdG9kYXkgPT0gY3VycmVudERhdGUuc3BsaXQoJ1QnKVswXSA/ICcgdG9kYXkgJyA6ICcgJyxcclxuICAgICAgICB3ZWVrZW5kcy5pbmNsdWRlcyhkYXkpIHx8IGhvbGlkYXlzLmluY2x1ZGVzKGN1cnJlbnREYXRlLnNwbGl0KCdUJylbMF0pID8gJyBob2xpZGF5ICcgOiAnICdcclxuICAgIClcIlxyXG4gICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICBbZXZlbnRCdWlsZGVyXT1cImV2ZW50QnVpbGRlclwiXHJcbiAgICAodmlld1JlYWR5KT1cIm1hcmtWaWV3QXNSZWFkeSgpXCJcclxuICAgID48L2FkYy10YWJsZT5cclxuPC9uZy1jb250YWluZXI+Il19