angular-cron-gen
Version:
A cron expression generator for AngularJS.
734 lines (643 loc) • 27.3 kB
JavaScript
(function () {
'use strict';
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
function _iterableToArrayLimit(arr, i) {
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var ACCEPTABLE_CRON_FORMATS = ['quartz'];
var DAY_LOOKUPS = {
'SUN': 'Sunday',
'MON': 'Monday',
'TUE': 'Tuesday',
'WED': 'Wednesday',
'THU': 'Thursday',
'FRI': 'Friday',
'SAT': 'Saturday'
};
var MONTH_WEEK_LOOKUPS = {
'#1': 'First',
'#2': 'Second',
'#3': 'Third',
'#4': 'Fourth',
'#5': 'Fifth',
'L': 'Last'
};
var MONTH_LOOKUPS = {
'1': 'January',
'2': 'February',
'3': 'March',
'4': 'April',
'5': 'May',
'6': 'June',
'7': 'July',
'8': 'August',
'9': 'September',
'10': 'October',
'11': 'November',
'12': 'December'
};
var States = {
INIT: 1,
DIRTY: 2,
CLEAN: 3
};
var CronGenComponent = /*#__PURE__*/function () {
CronGenComponent.$inject = ["$scope", "cronGenService"];
function CronGenComponent($scope, cronGenService) {
'ngInject';
var _this = this;
_classCallCheck(this, CronGenComponent);
this.parsedOptions = this.mergeDefaultOptions(this.options);
angular.extend(this, {
cronGenService: cronGenService,
cronFormat: 'quartz',
currentState: States.INIT,
activeTab: function () {
if (!_this.parsedOptions.hideMinutesTab) {
return 'minutes';
} else if (!_this.parsedOptions.hideHourlyTab) {
return 'hourly';
} else if (!_this.parsedOptions.hideDailyTab) {
return 'daily';
} else if (!_this.parsedOptions.hideWeeklyTab) {
return 'weekly';
} else if (!_this.parsedOptions.hideMonthlyTab) {
return 'monthly';
} else if (!_this.parsedOptions.hideYearlyTab) {
return 'yearly';
} else if (!_this.parsedOptions.hideAdvancedTab) {
return 'advanced';
}
throw 'No tabs available to make active';
}(),
selectOptions: cronGenService.selectOptions(),
state: {
minutes: {
minutes: 1,
seconds: 0
},
hourly: {
hours: 1,
minutes: 0,
seconds: 0
},
daily: {
subTab: 'everyDays',
everyDays: {
days: 1,
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
},
everyWeekDay: {
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
}
},
weekly: {
MON: true,
TUE: false,
WED: false,
THU: false,
FRI: false,
SAT: false,
SUN: false,
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
},
monthly: {
subTab: 'specificDay',
specificDay: {
day: '1',
months: 1,
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
},
specificWeekDay: {
monthWeek: '#1',
day: 'MON',
months: 1,
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
}
},
yearly: {
subTab: 'specificMonthDay',
specificMonthDay: {
month: 1,
day: '1',
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
},
specificMonthWeek: {
monthWeek: '#1',
day: 'MON',
month: 1,
hours: this.parsedOptions.use24HourTime ? 0 : 1,
minutes: 0,
seconds: 0,
hourType: this.parsedOptions.use24HourTime ? null : 'AM'
}
},
advanced: {
expression: '0 15 10 L-2 * ?'
}
}
}); //Validate our opts
if (ACCEPTABLE_CRON_FORMATS.indexOf(this.cronFormat) == -1) {
throw "Desired cron format (".concat(this.cronFormat, ") is not available");
} //On model changes, update our state to reflect the user's input
$scope.$watch('$ctrl.ngModel', function (cron) {
return _this.handleModelChange(cron);
}); // Watch for option changes
$scope.$watch('$ctrl.options', function (options) {
return _this.parsedOptions = _this.mergeDefaultOptions(options);
}, true);
}
_createClass(CronGenComponent, [{
key: "$onInit",
value: function $onInit() {
var _this2 = this;
//If possible, add our cron expression validator to our form
if (this.formCtrl && this.name) {
this.ngModelCtrl.$validators.testCronExpr = function (expression) {
return _this2.cronGenService.isValid(_this2.cronFormat, expression);
};
}
}
}, {
key: "setActiveTab",
value: function setActiveTab($event, tab) {
$event.preventDefault();
if (!this.ngDisabled) {
this.activeTab = tab;
this.regenerateCron();
}
}
}, {
key: "dayDisplay",
value: function dayDisplay(day) {
return DAY_LOOKUPS[day];
}
}, {
key: "monthWeekDisplay",
value: function monthWeekDisplay(monthWeekNumber) {
return MONTH_WEEK_LOOKUPS[monthWeekNumber];
}
}, {
key: "monthDisplay",
value: function monthDisplay(monthNumber) {
return MONTH_LOOKUPS[monthNumber];
}
}, {
key: "monthDayDisplay",
value: function monthDayDisplay(monthDay) {
if (monthDay === 'L') {
return 'Last Day';
} else if (monthDay === 'LW') {
return 'Last Weekday';
} else if (monthDay === '1W') {
return 'First Weekday';
} else {
return "".concat(monthDay).concat(this.cronGenService.appendInt(monthDay), " Day");
}
}
}, {
key: "processHour",
value: function processHour(hours) {
if (this.parsedOptions.use24HourTime) {
return hours;
} else {
return (hours + 11) % 12 + 1;
}
}
}, {
key: "getHourType",
value: function getHourType(hours) {
return this.parsedOptions.use24HourTime ? null : hours >= 12 ? 'PM' : 'AM';
}
}, {
key: "hourToCron",
value: function hourToCron(hour, hourType) {
if (this.parsedOptions.use24HourTime) {
return hour;
} else {
return hourType === 'AM' ? hour === 12 ? 0 : hour : hour === 12 ? 12 : hour + 12;
}
}
}, {
key: "mergeDefaultOptions",
value: function mergeDefaultOptions(options) {
return angular.extend({
formInputClass: 'form-control cron-gen-input',
formSelectClass: 'form-control cron-gen-select',
formRadioClass: 'cron-gen-radio',
formCheckboxClass: 'cron-gen-checkbox',
hideMinutesTab: false,
hideHourlyTab: false,
hideDailyTab: false,
hideWeeklyTab: false,
hideMonthlyTab: false,
hideYearlyTab: false,
hideAdvancedTab: true,
use24HourTime: false,
hideSeconds: false
}, options);
}
}, {
key: "regenerateCron",
value: function regenerateCron() {
var _this3 = this;
this.currentState = States.DIRTY;
switch (this.activeTab) {
case 'minutes':
this.ngModel = "".concat(this.state.minutes.seconds, " 0/").concat(this.state.minutes.minutes, " * 1/1 * ? *");
break;
case 'hourly':
this.ngModel = "".concat(this.state.hourly.seconds, " ").concat(this.state.hourly.minutes, " 0/").concat(this.state.hourly.hours, " 1/1 * ? *");
break;
case 'daily':
switch (this.state.daily.subTab) {
case 'everyDays':
this.ngModel = "".concat(this.state.daily.everyDays.seconds, " ").concat(this.state.daily.everyDays.minutes, " ").concat(this.hourToCron(this.state.daily.everyDays.hours, this.state.daily.everyDays.hourType), " 1/").concat(this.state.daily.everyDays.days, " * ? *");
break;
case 'everyWeekDay':
this.ngModel = "".concat(this.state.daily.everyWeekDay.seconds, " ").concat(this.state.daily.everyWeekDay.minutes, " ").concat(this.hourToCron(this.state.daily.everyWeekDay.hours, this.state.daily.everyWeekDay.hourType), " ? * MON-FRI *");
break;
default:
throw 'Invalid cron daily subtab selection';
}
break;
case 'weekly':
var days = this.selectOptions.days.reduce(function (acc, day) {
return _this3.state.weekly[day] ? acc.concat([day]) : acc;
}, []).join(',');
this.ngModel = "".concat(this.state.weekly.seconds, " ").concat(this.state.weekly.minutes, " ").concat(this.hourToCron(this.state.weekly.hours, this.state.weekly.hourType), " ? * ").concat(days, " *");
break;
case 'monthly':
switch (this.state.monthly.subTab) {
case 'specificDay':
this.ngModel = "".concat(this.state.monthly.specificDay.seconds, " ").concat(this.state.monthly.specificDay.minutes, " ").concat(this.hourToCron(this.state.monthly.specificDay.hours, this.state.monthly.specificDay.hourType), " ").concat(this.state.monthly.specificDay.day, " 1/").concat(this.state.monthly.specificDay.months, " ? *");
break;
case 'specificWeekDay':
this.ngModel = "".concat(this.state.monthly.specificWeekDay.seconds, " ").concat(this.state.monthly.specificWeekDay.minutes, " ").concat(this.hourToCron(this.state.monthly.specificWeekDay.hours, this.state.monthly.specificWeekDay.hourType), " ? 1/").concat(this.state.monthly.specificWeekDay.months, " ").concat(this.state.monthly.specificWeekDay.day).concat(this.state.monthly.specificWeekDay.monthWeek, " *");
break;
default:
throw 'Invalid cron monthly subtab selection';
}
break;
case 'yearly':
switch (this.state.yearly.subTab) {
case 'specificMonthDay':
this.ngModel = "".concat(this.state.yearly.specificMonthDay.seconds, " ").concat(this.state.yearly.specificMonthDay.minutes, " ").concat(this.hourToCron(this.state.yearly.specificMonthDay.hours, this.state.yearly.specificMonthDay.hourType), " ").concat(this.state.yearly.specificMonthDay.day, " ").concat(this.state.yearly.specificMonthDay.month, " ? *");
break;
case 'specificMonthWeek':
this.ngModel = "".concat(this.state.yearly.specificMonthWeek.seconds, " ").concat(this.state.yearly.specificMonthWeek.minutes, " ").concat(this.hourToCron(this.state.yearly.specificMonthWeek.hours, this.state.yearly.specificMonthWeek.hourType), " ? ").concat(this.state.yearly.specificMonthWeek.month, " ").concat(this.state.yearly.specificMonthWeek.day).concat(this.state.yearly.specificMonthWeek.monthWeek, " *");
break;
default:
throw 'Invalid cron yearly subtab selection';
}
break;
case 'advanced':
this.ngModel = this.state.advanced.expression;
break;
default:
throw 'Invalid cron active tab selection';
}
}
}, {
key: "handleModelChange",
value: function handleModelChange(cron) {
var _this4 = this;
if (this.currentState === States.DIRTY) {
this.currentState = States.CLEAN;
return;
} else {
this.currentState = States.CLEAN;
}
if (!cron) {
return;
}
var segments = cron.split(' ');
if (segments.length === 6 || segments.length === 7) {
var _segments = _slicedToArray(segments, 6),
seconds = _segments[0],
minutes = _segments[1],
hours = _segments[2],
dayOfMonth = _segments[3],
month = _segments[4],
dayOfWeek = _segments[5];
if (cron.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/)) {
this.activeTab = 'minutes';
this.state.minutes.minutes = parseInt(minutes.substring(2));
this.state.minutes.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/)) {
this.activeTab = 'hourly';
this.state.hourly.hours = parseInt(hours.substring(2));
this.state.hourly.minutes = parseInt(minutes);
this.state.hourly.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)) {
this.activeTab = 'daily';
this.state.daily.subTab = 'everyDays';
this.state.daily.everyDays.days = parseInt(dayOfMonth.substring(2));
var parsedHours = parseInt(hours);
this.state.daily.everyDays.hours = this.processHour(parsedHours);
this.state.daily.everyDays.hourType = this.getHourType(parsedHours);
this.state.daily.everyDays.minutes = parseInt(minutes);
this.state.daily.everyDays.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)) {
this.activeTab = 'daily';
this.state.daily.subTab = 'everyWeekDay';
var _parsedHours = parseInt(hours);
this.state.daily.everyWeekDay.hours = this.processHour(_parsedHours);
this.state.daily.everyWeekDay.hourType = this.getHourType(_parsedHours);
this.state.daily.everyWeekDay.minutes = parseInt(minutes);
this.state.daily.everyWeekDay.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ \? \* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \*/)) {
this.activeTab = 'weekly';
this.selectOptions.days.forEach(function (weekDay) {
return _this4.state.weekly[weekDay] = false;
});
dayOfWeek.split(',').forEach(function (weekDay) {
return _this4.state.weekly[weekDay] = true;
});
var _parsedHours2 = parseInt(hours);
this.state.weekly.hours = this.processHour(_parsedHours2);
this.state.weekly.hourType = this.getHourType(_parsedHours2);
this.state.weekly.minutes = parseInt(minutes);
this.state.weekly.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)) {
this.activeTab = 'monthly';
this.state.monthly.subTab = 'specificDay';
this.state.monthly.specificDay.day = dayOfMonth;
this.state.monthly.specificDay.months = parseInt(month.substring(2));
var _parsedHours3 = parseInt(hours);
this.state.monthly.specificDay.hours = this.processHour(_parsedHours3);
this.state.monthly.specificDay.hourType = this.getHourType(_parsedHours3);
this.state.monthly.specificDay.minutes = parseInt(minutes);
this.state.monthly.specificDay.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ \? 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)) {
var day = dayOfWeek.substr(0, 3);
var monthWeek = dayOfWeek.substr(3);
this.activeTab = 'monthly';
this.state.monthly.subTab = 'specificWeekDay';
this.state.monthly.specificWeekDay.monthWeek = monthWeek;
this.state.monthly.specificWeekDay.day = day;
this.state.monthly.specificWeekDay.months = parseInt(month.substring(2));
var _parsedHours4 = parseInt(hours);
this.state.monthly.specificWeekDay.hours = this.processHour(_parsedHours4);
this.state.monthly.specificWeekDay.hourType = this.getHourType(_parsedHours4);
this.state.monthly.specificWeekDay.minutes = parseInt(minutes);
this.state.monthly.specificWeekDay.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)) {
this.activeTab = 'yearly';
this.state.yearly.subTab = 'specificMonthDay';
this.state.yearly.specificMonthDay.month = parseInt(month);
this.state.yearly.specificMonthDay.day = dayOfMonth;
var _parsedHours5 = parseInt(hours);
this.state.yearly.specificMonthDay.hours = this.processHour(_parsedHours5);
this.state.yearly.specificMonthDay.hourType = this.getHourType(_parsedHours5);
this.state.yearly.specificMonthDay.minutes = parseInt(minutes);
this.state.yearly.specificMonthDay.seconds = parseInt(seconds);
} else if (cron.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)) {
var _day = dayOfWeek.substr(0, 3);
var _monthWeek = dayOfWeek.substr(3);
this.activeTab = 'yearly';
this.state.yearly.subTab = 'specificMonthWeek';
this.state.yearly.specificMonthWeek.monthWeek = _monthWeek;
this.state.yearly.specificMonthWeek.day = _day;
this.state.yearly.specificMonthWeek.month = parseInt(month);
var _parsedHours6 = parseInt(hours);
this.state.yearly.specificMonthWeek.hours = this.processHour(_parsedHours6);
this.state.yearly.specificMonthWeek.hourType = this.getHourType(_parsedHours6);
this.state.yearly.specificMonthWeek.minutes = parseInt(minutes);
this.state.yearly.specificMonthWeek.seconds = parseInt(seconds);
} else {
this.activeTab = 'advanced';
this.state.advanced.expression = cron;
}
} else {
throw 'Unsupported cron expression. Expression must be 6 or 7 segments';
}
}
}]);
return CronGenComponent;
}();
var QUARTZ_REGEX = /^\s*($|#|\w+\s*=|(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?(?:,(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?)*)\s+(\?|\*|(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?(?:,(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?)*)\s+(\?|\*|(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\?|\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\s+(\?|\*|(?:[1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-|\/|\,|#)(?:[1-5]))?(?:L)?(?:,(?:[1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-|\/|\,|#)(?:[1-5]))?(?:L)?)*|\?|\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\s)+(\?|\*|(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?(?:,(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?)*))$/;
var CronGenService = /*#__PURE__*/function () {
function CronGenService() {
_classCallCheck(this, CronGenService);
}
_createClass(CronGenService, [{
key: "isValid",
value: function isValid(cronFormat, expression) {
if (!expression) {
return false;
}
var formattedExpression = expression.toUpperCase();
switch (cronFormat) {
case 'quartz':
return !!formattedExpression.match(QUARTZ_REGEX);
default:
throw "Desired cron format (".concat(cronFormat, ") is not available");
}
}
}, {
key: "appendInt",
value: function appendInt(number) {
var value = "".concat(number);
if (value.length > 1) {
var secondToLastDigit = value.charAt(value.length - 2);
if (secondToLastDigit === '1') {
return "th";
}
}
var lastDigit = value.charAt(value.length - 1);
switch (lastDigit) {
case '1':
return "st";
case '2':
return "nd";
case '3':
return "rd";
default:
return "th";
}
}
}, {
key: "padNumber",
value: function padNumber(number) {
return "".concat(number).length === 1 ? "0".concat(number) : "".concat(number);
}
}, {
key: "range",
value: function range(start, end) {
if (typeof end === 'undefined') {
end = start;
start = 0;
}
if (start < 0 || end < 0) throw 'Range values must be positive values';
if (end > start) {
return _toConsumableArray(new Array(end - start)).map(function (val, idx) {
return idx + start;
});
} else if (start < end) {
return _toConsumableArray(new Array(start - end)).map(function (val, idx) {
return end - idx;
});
} else {
return [];
}
}
}, {
key: "selectOptions",
value: function selectOptions() {
return {
months: this.range(1, 13),
monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],
days: ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],
minutes: this.range(1, 60),
fullMinutes: this.range(60),
seconds: this.range(60),
hours: this.range(1, 24),
monthDays: this.range(1, 32),
monthDaysWithLasts: ['1W'].concat(_toConsumableArray(_toConsumableArray(new Array(31)).map(function (val, idx) {
return "".concat(idx + 1);
})), ['LW', 'L'])
};
}
}]);
return CronGenService;
}();
var CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) {
'ngInject';
var _this = this;
_classCallCheck(this, CronGenTimeSelect);
this.cronGenService = cronGenService;
this.selectOptions = {
minutes: cronGenService.range(60),
seconds: cronGenService.range(60),
hourTypes: ['AM', 'PM']
};
$scope.$watch('$ctrl.use24HourTime', function () {
_this.selectOptions.hours = _this.use24HourTime ? _this.cronGenService.range(24) : _this.cronGenService.range(1, 13);
});
};
CronGenTimeSelect.$inject = ["$scope", "cronGenService"];
angular.module('angular-cron-gen', []).service('cronGenService', CronGenService).component('cronGenTimeSelect', {
bindings: {
isDisabled: '<',
onChange: '&',
isRequired: '<',
model: '=',
selectClass: '<',
use24HourTime: '<',
hideSeconds: '<',
namePrefix: '@'
},
templateUrl: 'angular-cron-gen/cron-gen-time-select.html',
controller: CronGenTimeSelect
}).component('cronGen', {
bindings: {
ngModel: '=',
ngDisabled: '<',
options: '<',
cronFormat: '@',
templateUrl: '@',
name: '@'
},
require: {
ngModelCtrl: 'ngModel',
ngDisabledCtrl: '?ngDisabled',
formCtrl: '^?form'
},
templateUrl: ["$attrs", function templateUrl($attrs) {
'ngInject';
return $attrs.templateUrl || 'angular-cron-gen/cron-gen.html';
}],
controller: CronGenComponent
});
}());