![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/mirasvit/module-core/src/Core/view/adminhtml/web/js/lib/ |
define([ 'Mirasvit_Core/js/lib/moment', 'Mirasvit_Core/js/lib/later' ], function (moment) { 'use strict'; /* * For an array of numbers, e.g. a list of hours in a schedule, * return a string listing out all of the values (complete with * "and" plus ordinal text on the last item). */ var numberList = function(numbers) { if (numbers.length < 2) { return moment()._locale.ordinal(numbers); } var last_val = numbers.pop(); return numbers.join(', ') + ' and ' + moment()._locale.ordinal(last_val); }; /* * Parse a number into day of week, or a month name; * used in dateList below. */ var numberToDateName = function(value, type) { if (type == 'dow') { return moment().day(value - 1).format('ddd'); } else if (type == 'mon') { return moment().month(value - 1).format('MMM'); } }; /* * From an array of numbers corresponding to dates (given in type: either * days of the week, or months), return a string listing all the values. */ var dateList = function(numbers, type) { if (numbers.length < 2) { return numberToDateName(''+numbers[0], type); } var last_val = '' + numbers.pop(); var output_text = ''; for (var i=0, value; value=numbers[i]; i++) { if (output_text.length > 0) { output_text += ', '; } output_text += numberToDateName(value, type); } return output_text + ' and ' + numberToDateName(last_val, type); }; /* * Pad to equivalent of sprintf('%02d'). Both moment.js and later.js * have zero-fill functions, but alas, they're private. */ var zeroPad = function(x) { return (x < 10) ? '0' + x : x; }; //---------------- /* * Given a schedule from later.js (i.e. after parsing the cronspec), * generate a friendly sentence description. */ var scheduleToSentence = function(schedule) { var output_text = 'Every '; if (schedule['h'] && schedule['m'] && schedule['h'].length <= 2 && schedule['m'].length <= 2) { // If there are only one or two specified values for // hour or minute, print them in HH:MM format var hm = []; for (var i=0; i < schedule['h'].length; i++) { for (var j=0; j < schedule['m'].length; j++) { hm.push(zeroPad(schedule['h'][i]) + ':' + zeroPad(schedule['m'][j])); } } if (hm.length < 2) { output_text = hm[0]; } else { var last_val = hm.pop(); output_text = hm.join(', ') + ' and ' + last_val; } if (!schedule['d'] && !schedule['D']) { output_text += ' every day'; } } else { // Otherwise, list out every specified hour/minute value. if(schedule['h']) { // runs only at specific hours if (schedule['m']) { // and only at specific minutes output_text += numberList(schedule['m']) + ' minute past the ' + numberList(schedule['h']) + ' hour'; } else { // specific hours, but every minute output_text += 'minute of ' + numberList(schedule['h']) + ' hour'; } } else if(schedule['m']) { // every hour, but specific minutes if (schedule['m'].length == 1 && schedule['m'][0] == 0) { output_text += 'hour, on the hour'; } else { output_text += numberList(schedule['m']) + ' minute past every hour'; } } else { // cronspec has "*" for both hour and minute output_text += 'minute'; } } if (schedule['D'] && schedule['D'].length !== 31) { // runs only on specific day(s) of month output_text += ' on the ' + numberList(schedule['D']); if (!schedule['M']) { output_text += ' of every month'; } } if (schedule['d']) { // runs only on specific day(s) of week if (schedule['D']) { // if both day fields are specified, cron uses both; superuser.com/a/348372 output_text += ' and every '; } else { output_text += ' on '; } output_text += dateList(schedule['d'], 'dow'); } if (schedule['M']) { if( schedule['M'].length === 12 ) { output_text += ' day of every month' } else { // runs only in specific months; put this output last output_text += ' in ' + dateList(schedule['M'], 'mon'); } } return output_text; }; //---------------- /* * Given a cronspec, return the human-readable string. */ var toString = function(cronspec, sixth) { var schedule = later.parse.cron(cronspec, sixth); return scheduleToSentence(schedule['schedules'][0]); }; /* * Given a cronspec, return the next date for when it will next run. * (This is just a wrapper for later.js) */ var getNextDate = function(cronspec, sixth) { var schedule = later.parse.cron(cronspec, sixth); return later.schedule(schedule).next(); }; /* * Given a cronspec, return a friendly string for when it will next run. * (This is just a wrapper for later.js and moment.js) */ var getNext = function(cronspec, sixth) { return moment( getNextDate( cronspec, sixth ) ).calendar(); }; //---------------- // attach ourselves to window in the browser, and to exports in Node, // so our functions can always be called as prettyCron.toString() var global_obj = {}; global_obj.toString = toString; global_obj.getNext = getNext; global_obj.getNextDate = getNextDate; return global_obj });