angular-weblineindia-date-picker
Version:
Date Picker component built in AngularJS to select date and time. Supports Angular 9 version.
175 lines • 25.1 kB
JavaScript
import { __assign, __decorate } from "tslib";
import { Injectable } from '@angular/core';
import * as momentNs from 'moment';
import { UtilsService } from '../common/services/utils/utils.service';
var moment = momentNs;
var DayCalendarService = /** @class */ (function () {
function DayCalendarService(utilsService) {
this.utilsService = utilsService;
this.DEFAULT_CONFIG = {
showNearMonthDays: true,
showWeekNumbers: false,
firstDayOfWeek: 'su',
weekDayFormat: 'ddd',
format: 'DD-MM-YYYY',
allowMultiSelect: false,
monthFormat: 'MMM, YYYY',
enableMonthSelector: true,
locale: moment.locale(),
dayBtnFormat: 'DD',
unSelectOnClick: true
};
this.DAYS = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa'];
}
DayCalendarService.prototype.getConfig = function (config) {
var _config = __assign(__assign({}, this.DEFAULT_CONFIG), this.utilsService.clearUndefined(config));
this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);
moment.locale(_config.locale);
return _config;
};
DayCalendarService.prototype.generateDaysMap = function (firstDayOfWeek) {
var firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);
var daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));
return daysArr.reduce(function (map, day, index) {
map[day] = index;
return map;
}, {});
};
DayCalendarService.prototype.generateMonthArray = function (config, month, selected) {
var _this = this;
var monthArray = [];
var firstDayOfWeekIndex = this.DAYS.indexOf(config.firstDayOfWeek);
var firstDayOfBoard = month.clone().startOf('month');
while (firstDayOfBoard.day() !== firstDayOfWeekIndex) {
firstDayOfBoard.subtract(1, 'day');
}
var current = firstDayOfBoard.clone();
var prevMonth = month.clone().subtract(1, 'month');
var nextMonth = month.clone().add(1, 'month');
var today = moment();
var daysOfCalendar = this.utilsService.createArray(42)
.reduce(function (array) {
array.push({
date: current.clone(),
selected: !!selected.find(function (selectedDay) { return current.isSame(selectedDay, 'day'); }),
currentMonth: current.isSame(month, 'month'),
prevMonth: current.isSame(prevMonth, 'month'),
nextMonth: current.isSame(nextMonth, 'month'),
currentDay: current.isSame(today, 'day'),
disabled: _this.isDateDisabled(current, config)
});
current.add(1, 'day');
return array;
}, []);
daysOfCalendar.forEach(function (day, index) {
var weekIndex = Math.floor(index / 7);
if (!monthArray[weekIndex]) {
monthArray.push([]);
}
monthArray[weekIndex].push(day);
});
if (!config.showNearMonthDays) {
monthArray = this.removeNearMonthWeeks(month, monthArray);
}
return monthArray;
};
DayCalendarService.prototype.generateWeekdays = function (firstDayOfWeek) {
var weekdayNames = {
su: moment().day(0),
mo: moment().day(1),
tu: moment().day(2),
we: moment().day(3),
th: moment().day(4),
fr: moment().day(5),
sa: moment().day(6)
};
var weekdays = [];
var daysMap = this.generateDaysMap(firstDayOfWeek);
for (var dayKey in daysMap) {
if (daysMap.hasOwnProperty(dayKey)) {
weekdays[daysMap[dayKey]] = weekdayNames[dayKey];
}
}
return weekdays;
};
DayCalendarService.prototype.isDateDisabled = function (date, config) {
if (config.isDayDisabledCallback) {
return config.isDayDisabledCallback(date);
}
if (config.min && date.isBefore(config.min, 'day')) {
return true;
}
return !!(config.max && date.isAfter(config.max, 'day'));
};
// todo:: add unit tests
DayCalendarService.prototype.getHeaderLabel = function (config, month) {
if (config.monthFormatter) {
return config.monthFormatter(month);
}
return month.format(config.monthFormat);
};
// todo:: add unit tests
DayCalendarService.prototype.shouldShowLeft = function (min, currentMonthView) {
return min ? min.isBefore(currentMonthView, 'month') : true;
};
// todo:: add unit tests
DayCalendarService.prototype.shouldShowRight = function (max, currentMonthView) {
return max ? max.isAfter(currentMonthView, 'month') : true;
};
DayCalendarService.prototype.generateDaysIndexMap = function (firstDayOfWeek) {
var firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);
var daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));
return daysArr.reduce(function (map, day, index) {
map[index] = day;
return map;
}, {});
};
DayCalendarService.prototype.getMonthCalendarConfig = function (componentConfig) {
return this.utilsService.clearUndefined({
min: componentConfig.min,
max: componentConfig.max,
format: componentConfig.format,
isNavHeaderBtnClickable: true,
allowMultiSelect: false,
locale: componentConfig.locale,
yearFormat: componentConfig.yearFormat,
yearFormatter: componentConfig.yearFormatter,
monthBtnFormat: componentConfig.monthBtnFormat,
monthBtnFormatter: componentConfig.monthBtnFormatter,
monthBtnCssClassCallback: componentConfig.monthBtnCssClassCallback,
multipleYearsNavigateBy: componentConfig.multipleYearsNavigateBy,
showMultipleYearsNavigation: componentConfig.showMultipleYearsNavigation,
showGoToCurrent: componentConfig.showGoToCurrent,
numOfMonthRows: componentConfig.numOfMonthRows
});
};
DayCalendarService.prototype.getDayBtnText = function (config, day) {
if (config.dayBtnFormatter) {
return config.dayBtnFormatter(day);
}
return day.format(config.dayBtnFormat);
};
DayCalendarService.prototype.getDayBtnCssClass = function (config, day) {
if (config.dayBtnCssClassCallback) {
return config.dayBtnCssClassCallback(day);
}
return '';
};
DayCalendarService.prototype.removeNearMonthWeeks = function (currentMonth, monthArray) {
if (monthArray[monthArray.length - 1].find(function (day) { return day.date.isSame(currentMonth, 'month'); })) {
return monthArray;
}
else {
return monthArray.slice(0, -1);
}
};
DayCalendarService.ctorParameters = function () { return [
{ type: UtilsService }
]; };
DayCalendarService = __decorate([
Injectable()
], DayCalendarService);
return DayCalendarService;
}());
export { DayCalendarService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LWNhbGVuZGFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZzItZGF0ZS1waWNrZXIvIiwic291cmNlcyI6WyJkYXktY2FsZW5kYXIvZGF5LWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFHbkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBS3BFLElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUd4QjtJQWdCRSw0QkFBb0IsWUFBMEI7UUFBMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFmckMsbUJBQWMsR0FBdUI7WUFDNUMsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixlQUFlLEVBQUUsS0FBSztZQUN0QixjQUFjLEVBQUUsSUFBSTtZQUNwQixhQUFhLEVBQUUsS0FBSztZQUNwQixNQUFNLEVBQUUsWUFBWTtZQUNwQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxFQUFFLElBQUk7WUFDbEIsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQUNlLFNBQUksR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBR25FLENBQUM7SUFFRCxzQ0FBUyxHQUFULFVBQVUsTUFBMEI7UUFDbEMsSUFBTSxPQUFPLEdBQUcsc0JBQ1gsSUFBSSxDQUFDLGNBQWMsR0FDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLG9C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QUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7Z0JBbExpQyxZQUFZOztJQWhCbkMsa0JBQWtCO1FBRDlCLFVBQVUsRUFBRTtPQUNBLGtCQUFrQixDQW1NOUI7SUFBRCx5QkFBQztDQUFBLEFBbk1ELElBbU1DO1NBbk1ZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBtb21lbnROcyBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1dlZWtEYXlzfSBmcm9tICcuLi9jb21tb24vdHlwZXMvd2Vlay1kYXlzLnR5cGUnO1xuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uL2NvbW1vbi9zZXJ2aWNlcy91dGlscy91dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7SURheX0gZnJvbSAnLi9kYXkubW9kZWwnO1xuaW1wb3J0IHtJRGF5Q2FsZW5kYXJDb25maWcsIElEYXlDYWxlbmRhckNvbmZpZ0ludGVybmFsfSBmcm9tICcuL2RheS1jYWxlbmRhci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHtJTW9udGhDYWxlbmRhckNvbmZpZ30gZnJvbSAnLi4vbW9udGgtY2FsZW5kYXIvbW9udGgtY2FsZW5kYXItY29uZmlnJztcblxuY29uc3QgbW9tZW50ID0gbW9tZW50TnM7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXlDYWxlbmRhclNlcnZpY2Uge1xuICByZWFkb25seSBERUZBVUxUX0NPTkZJRzogSURheUNhbGVuZGFyQ29uZmlnID0ge1xuICAgIHNob3dOZWFyTW9udGhEYXlzOiB0cnVlLFxuICAgIHNob3dXZWVrTnVtYmVyczogZmFsc2UsXG4gICAgZmlyc3REYXlPZldlZWs6ICdzdScsXG4gICAgd2Vla0RheUZvcm1hdDogJ2RkZCcsXG4gICAgZm9ybWF0OiAnREQtTU0tWVlZWScsXG4gICAgYWxsb3dNdWx0aVNlbGVjdDogZmFsc2UsXG4gICAgbW9udGhGb3JtYXQ6ICdNTU0sIFlZWVknLFxuICAgIGVuYWJsZU1vbnRoU2VsZWN0b3I6IHRydWUsXG4gICAgbG9jYWxlOiBtb21lbnQubG9jYWxlKCksXG4gICAgZGF5QnRuRm9ybWF0OiAnREQnLFxuICAgIHVuU2VsZWN0T25DbGljazogdHJ1ZVxuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IERBWVMgPSBbJ3N1JywgJ21vJywgJ3R1JywgJ3dlJywgJ3RoJywgJ2ZyJywgJ3NhJ107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSkge1xuICB9XG5cbiAgZ2V0Q29uZmlnKGNvbmZpZzogSURheUNhbGVuZGFyQ29uZmlnKTogSURheUNhbGVuZGFyQ29uZmlnSW50ZXJuYWwge1xuICAgIGNvbnN0IF9jb25maWcgPSA8SURheUNhbGVuZGFyQ29uZmlnSW50ZXJuYWw+e1xuICAgICAgLi4udGhpcy5ERUZBVUxUX0NPTkZJRyxcbiAgICAgIC4uLnRoaXMudXRpbHNTZXJ2aWNlLmNsZWFyVW5kZWZpbmVkKGNvbmZpZylcbiAgICB9O1xuXG4gICAgdGhpcy51dGlsc1NlcnZpY2UuY29udmVydFByb3BzVG9Nb21lbnQoX2NvbmZpZywgX2NvbmZpZy5mb3JtYXQsIFsnbWluJywgJ21heCddKTtcblxuICAgIG1vbWVudC5sb2NhbGUoX2NvbmZpZy5sb2NhbGUpO1xuXG4gICAgcmV0dXJuIF9jb25maWc7XG4gIH1cblxuICBnZW5lcmF0ZURheXNNYXAoZmlyc3REYXlPZldlZWs6IFdlZWtEYXlzKSB7XG4gICAgY29uc3QgZmlyc3REYXlJbmRleCA9IHRoaXMuREFZUy5pbmRleE9mKGZpcnN0RGF5T2ZXZWVrKTtcbiAgICBjb25zdCBkYXlzQXJyID0gdGhpcy5EQVlTLnNsaWNlKGZpcnN0RGF5SW5kZXgsIDcpLmNvbmNhdCh0aGlzLkRBWVMuc2xpY2UoMCwgZmlyc3REYXlJbmRleCkpO1xuICAgIHJldHVybiBkYXlzQXJyLnJlZHVjZSgobWFwLCBkYXksIGluZGV4KSA9PiB7XG4gICAgICBtYXBbZGF5XSA9IGluZGV4O1xuXG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIDx7W2tleTogc3RyaW5nXTogbnVtYmVyfT57fSk7XG4gIH1cblxuICBnZW5lcmF0ZU1vbnRoQXJyYXkoY29uZmlnOiBJRGF5Q2FsZW5kYXJDb25maWdJbnRlcm5hbCwgbW9udGg6IE1vbWVudCwgc2VsZWN0ZWQ6IE1vbWVudFtdKTogSURheVtdW10ge1xuICAgIGxldCBtb250aEFycmF5OiBJRGF5W11bXSA9IFtdO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrSW5kZXggPSB0aGlzLkRBWVMuaW5kZXhPZihjb25maWcuZmlyc3REYXlPZldlZWspO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZCb2FyZCA9IG1vbnRoLmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcblxuICAgIHdoaWxlIChmaXJzdERheU9mQm9hcmQuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrSW5kZXgpIHtcbiAgICAgIGZpcnN0RGF5T2ZCb2FyZC5zdWJ0cmFjdCgxLCAnZGF5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IGZpcnN0RGF5T2ZCb2FyZC5jbG9uZSgpO1xuICAgIGNvbnN0IHByZXZNb250aCA9IG1vbnRoLmNsb25lKCkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XG4gICAgY29uc3QgbmV4dE1vbnRoID0gbW9udGguY2xvbmUoKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcblxuICAgIGNvbnN0IGRheXNPZkNhbGVuZGFyOiBJRGF5W10gPSB0aGlzLnV0aWxzU2VydmljZS5jcmVhdGVBcnJheSg0MilcbiAgICAgIC5yZWR1Y2UoKGFycmF5OiBJRGF5W10pID0+IHtcbiAgICAgICAgYXJyYXkucHVzaCh7XG4gICAgICAgICAgZGF0ZTogY3VycmVudC5jbG9uZSgpLFxuICAgICAgICAgIHNlbGVjdGVkOiAhIXNlbGVjdGVkLmZpbmQoc2VsZWN0ZWREYXkgPT4gY3VycmVudC5pc1NhbWUoc2VsZWN0ZWREYXksICdkYXknKSksXG4gICAgICAgICAgY3VycmVudE1vbnRoOiBjdXJyZW50LmlzU2FtZShtb250aCwgJ21vbnRoJyksXG4gICAgICAgICAgcHJldk1vbnRoOiBjdXJyZW50LmlzU2FtZShwcmV2TW9udGgsICdtb250aCcpLFxuICAgICAgICAgIG5leHRNb250aDogY3VycmVudC5pc1NhbWUobmV4dE1vbnRoLCAnbW9udGgnKSxcbiAgICAgICAgICBjdXJyZW50RGF5OiBjdXJyZW50LmlzU2FtZSh0b2RheSwgJ2RheScpLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGF0ZURpc2FibGVkKGN1cnJlbnQsIGNvbmZpZylcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnQuYWRkKDEsICdkYXknKTtcblxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9LCBbXSk7XG5cbiAgICBkYXlzT2ZDYWxlbmRhci5mb3JFYWNoKChkYXksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB3ZWVrSW5kZXggPSBNYXRoLmZsb29yKGluZGV4IC8gNyk7XG5cbiAgICAgIGlmICghbW9udGhBcnJheVt3ZWVrSW5kZXhdKSB7XG4gICAgICAgIG1vbnRoQXJyYXkucHVzaChbXSk7XG4gICAgICB9XG5cbiAgICAgIG1vbnRoQXJyYXlbd2Vla0luZGV4XS5wdXNoKGRheSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWNvbmZpZy5zaG93TmVhck1vbnRoRGF5cykge1xuICAgICAgbW9udGhBcnJheSA9IHRoaXMucmVtb3ZlTmVhck1vbnRoV2Vla3MobW9udGgsIG1vbnRoQXJyYXkpO1xuICAgIH1cblxuICAgIHJldHVybiBtb250aEFycmF5O1xuICB9XG5cbiAgZ2VuZXJhdGVXZWVrZGF5cyhmaXJzdERheU9mV2VlazogV2Vla0RheXMpOiBNb21lbnRbXSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzOiB7W2tleTogc3RyaW5nXTogTW9tZW50fSA9IHtcbiAgICAgIHN1OiBtb21lbnQoKS5kYXkoMCksXG4gICAgICBtbzogbW9tZW50KCkuZGF5KDEpLFxuICAgICAgdHU6IG1vbWVudCgpLmRheSgyKSxcbiAgICAgIHdlOiBtb21lbnQoKS5kYXkoMyksXG4gICAgICB0aDogbW9tZW50KCkuZGF5KDQpLFxuICAgICAgZnI6IG1vbWVudCgpLmRheSg1KSxcbiAgICAgIHNhOiBtb21lbnQoKS5kYXkoNilcbiAgICB9O1xuICAgIGNvbnN0IHdlZWtkYXlzOiBNb21lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGRheXNNYXAgPSB0aGlzLmdlbmVyYXRlRGF5c01hcChmaXJzdERheU9mV2Vlayk7XG5cbiAgICBmb3IgKGNvbnN0IGRheUtleSBpbiBkYXlzTWFwKSB7XG4gICAgICBpZiAoZGF5c01hcC5oYXNPd25Qcm9wZXJ0eShkYXlLZXkpKSB7XG4gICAgICAgIHdlZWtkYXlzW2RheXNNYXBbZGF5S2V5XV0gPSB3ZWVrZGF5TmFtZXNbZGF5S2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2Vla2RheXM7XG4gIH1cblxuICBpc0RhdGVEaXNhYmxlZChkYXRlOiBNb21lbnQsIGNvbmZpZzogSURheUNhbGVuZGFyQ29uZmlnSW50ZXJuYWwpOiBib29sZWFuIHtcbiAgICBpZiAoY29uZmlnLmlzRGF5RGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgcmV0dXJuIGNvbmZpZy5pc0RheURpc2FibGVkQ2FsbGJhY2soZGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5taW4gJiYgZGF0ZS5pc0JlZm9yZShjb25maWcubWluLCAnZGF5JykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShjb25maWcubWF4ICYmIGRhdGUuaXNBZnRlcihjb25maWcubWF4LCAnZGF5JykpO1xuICB9XG5cbiAgLy8gdG9kbzo6IGFkZCB1bml0IHRlc3RzXG4gIGdldEhlYWRlckxhYmVsKGNvbmZpZzogSURheUNhbGVuZGFyQ29uZmlnSW50ZXJuYWwsIG1vbnRoOiBNb21lbnQpOiBzdHJpbmcge1xuICAgIGlmIChjb25maWcubW9udGhGb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBjb25maWcubW9udGhGb3JtYXR0ZXIobW9udGgpO1xuICAgIH1cblxuICAgIHJldHVybiBtb250aC5mb3JtYXQoY29uZmlnLm1vbnRoRm9ybWF0KTtcbiAgfVxuXG4gIC8vIHRvZG86OiBhZGQgdW5pdCB0ZXN0c1xuICBzaG91bGRTaG93TGVmdChtaW46IE1vbWVudCwgY3VycmVudE1vbnRoVmlldzogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1pbiA/IG1pbi5pc0JlZm9yZShjdXJyZW50TW9udGhWaWV3LCAnbW9udGgnKSA6IHRydWU7XG4gIH1cblxuICAvLyB0b2RvOjogYWRkIHVuaXQgdGVzdHNcbiAgc2hvdWxkU2hvd1JpZ2h0KG1heDogTW9tZW50LCBjdXJyZW50TW9udGhWaWV3OiBNb21lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWF4ID8gbWF4LmlzQWZ0ZXIoY3VycmVudE1vbnRoVmlldywgJ21vbnRoJykgOiB0cnVlO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXlzSW5kZXhNYXAoZmlyc3REYXlPZldlZWs6IFdlZWtEYXlzKSB7XG4gICAgY29uc3QgZmlyc3REYXlJbmRleCA9IHRoaXMuREFZUy5pbmRleE9mKGZpcnN0RGF5T2ZXZWVrKTtcbiAgICBjb25zdCBkYXlzQXJyID0gdGhpcy5EQVlTLnNsaWNlKGZpcnN0RGF5SW5kZXgsIDcpLmNvbmNhdCh0aGlzLkRBWVMuc2xpY2UoMCwgZmlyc3REYXlJbmRleCkpO1xuICAgIHJldHVybiBkYXlzQXJyLnJlZHVjZSgobWFwLCBkYXksIGluZGV4KSA9PiB7XG4gICAgICBtYXBbaW5kZXhdID0gZGF5O1xuXG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIDx7W2tleTogbnVtYmVyXTogc3RyaW5nfT57fSk7XG4gIH1cblxuICBnZXRNb250aENhbGVuZGFyQ29uZmlnKGNvbXBvbmVudENvbmZpZzogSURheUNhbGVuZGFyQ29uZmlnSW50ZXJuYWwpOiBJTW9udGhDYWxlbmRhckNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudXRpbHNTZXJ2aWNlLmNsZWFyVW5kZWZpbmVkKHtcbiAgICAgIG1pbjogY29tcG9uZW50Q29uZmlnLm1pbixcbiAgICAgIG1heDogY29tcG9uZW50Q29uZmlnLm1heCxcbiAgICAgIGZvcm1hdDogY29tcG9uZW50Q29uZmlnLmZvcm1hdCxcbiAgICAgIGlzTmF2SGVhZGVyQnRuQ2xpY2thYmxlOiB0cnVlLFxuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogZmFsc2UsXG4gICAgICBsb2NhbGU6IGNvbXBvbmVudENvbmZpZy5sb2NhbGUsXG4gICAgICB5ZWFyRm9ybWF0OiBjb21wb25lbnRDb25maWcueWVhckZvcm1hdCxcbiAgICAgIHllYXJGb3JtYXR0ZXI6IGNvbXBvbmVudENvbmZpZy55ZWFyRm9ybWF0dGVyLFxuICAgICAgbW9udGhCdG5Gb3JtYXQ6IGNvbXBvbmVudENvbmZpZy5tb250aEJ0bkZvcm1hdCxcbiAgICAgIG1vbnRoQnRuRm9ybWF0dGVyOiBjb21wb25lbnRDb25maWcubW9udGhCdG5Gb3JtYXR0ZXIsXG4gICAgICBtb250aEJ0bkNzc0NsYXNzQ2FsbGJhY2s6IGNvbXBvbmVudENvbmZpZy5tb250aEJ0bkNzc0NsYXNzQ2FsbGJhY2ssXG4gICAgICBtdWx0aXBsZVllYXJzTmF2aWdhdGVCeTogY29tcG9uZW50Q29uZmlnLm11bHRpcGxlWWVhcnNOYXZpZ2F0ZUJ5LFxuICAgICAgc2hvd011bHRpcGxlWWVhcnNOYXZpZ2F0aW9uOiBjb21wb25lbnRDb25maWcuc2hvd011bHRpcGxlWWVhcnNOYXZpZ2F0aW9uLFxuICAgICAgc2hvd0dvVG9DdXJyZW50OiBjb21wb25lbnRDb25maWcuc2hvd0dvVG9DdXJyZW50LFxuICAgICAgbnVtT2ZNb250aFJvd3M6IGNvbXBvbmVudENvbmZpZy5udW1PZk1vbnRoUm93c1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF5QnRuVGV4dChjb25maWc6IElEYXlDYWxlbmRhckNvbmZpZ0ludGVybmFsLCBkYXk6IE1vbWVudCk6IHN0cmluZyB7XG4gICAgaWYgKGNvbmZpZy5kYXlCdG5Gb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBjb25maWcuZGF5QnRuRm9ybWF0dGVyKGRheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRheS5mb3JtYXQoY29uZmlnLmRheUJ0bkZvcm1hdCk7XG4gIH1cblxuICBnZXREYXlCdG5Dc3NDbGFzcyhjb25maWc6IElEYXlDYWxlbmRhckNvbmZpZ0ludGVybmFsLCBkYXk6IE1vbWVudCk6IHN0cmluZyB7XG4gICAgaWYgKGNvbmZpZy5kYXlCdG5Dc3NDbGFzc0NhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gY29uZmlnLmRheUJ0bkNzc0NsYXNzQ2FsbGJhY2soZGF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU5lYXJNb250aFdlZWtzKGN1cnJlbnRNb250aDogTW9tZW50LCBtb250aEFycmF5OiBJRGF5W11bXSk6IElEYXlbXVtdIHtcbiAgICBpZiAobW9udGhBcnJheVttb250aEFycmF5Lmxlbmd0aCAtIDFdLmZpbmQoKGRheSkgPT4gZGF5LmRhdGUuaXNTYW1lKGN1cnJlbnRNb250aCwgJ21vbnRoJykpKSB7XG4gICAgICByZXR1cm4gbW9udGhBcnJheTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vbnRoQXJyYXkuc2xpY2UoMCwgLTEpO1xuICAgIH1cbiAgfVxufVxuIl19