UNPKG

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
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