From c9475a72fa92ab2d6339edfa20e2f80783eec833 Mon Sep 17 00:00:00 2001 From: David Bonomels Date: Wed, 12 Jul 2017 11:49:36 +0200 Subject: [PATCH 1/2] add i18n support --- build/cron-gen.min.js | 3 +- build/cron-gen.min.js.map | 2 +- build/cron-gen.module.js | 211 +++++++++++++++++++++++------------- build/templates.js | 2 +- example/app.js | 3 +- example/index.html | 1 + package.json | 3 + src/cron-gen.component.js | 101 ++++++++++++----- src/cron-gen.module.js | 75 ++++++++++++- src/templates/cron-gen.html | 78 ++++++------- 10 files changed, 327 insertions(+), 152 deletions(-) diff --git a/build/cron-gen.min.js b/build/cron-gen.min.js index aa8d9b9a..16d88ff6 100644 --- a/build/cron-gen.min.js +++ b/build/cron-gen.min.js @@ -1,3 +1,4 @@ -!function(){"use strict";var e=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t=function(){function e(e,t){for(var n=0;n=12?"PM":"AM"}},{key:"hourToCron",value:function(e,t){return this.parsedOptions.use24HourTime?e:"AM"===t?12===e?0:e:12===e?12:e+12}},{key:"mergeDefaultOptions",value:function(e){return angular.extend({formInputClass:"form-control cron-gen-input",formSelectClass:"form-control cron-gen-select",formRadioClass:"form-control-static cron-gen-radio",formCheckboxClass:"form-control-static cron-gen-checkbox",hideMinutesTab:!1,hideHourlyTab:!1,hideDailyTab:!1,hideWeeklyTab:!1,hideMonthlyTab:!1,hideYearlyTab:!1,hideAdvancedTab:!0,use24HourTime:!1,hideSeconds:!1},e)}},{key:"regenerateCron",value:function(){var e=this;switch(this.currentState=c.DIRTY,this.activeTab){case"minutes":this.ngModel=this.state.minutes.seconds+" 0/"+this.state.minutes.minutes+" * 1/1 * ? *";break;case"hourly":this.ngModel=this.state.hourly.seconds+" "+this.state.hourly.minutes+" 0/"+this.state.hourly.hours+" 1/1 * ? *";break;case"daily":switch(this.state.daily.subTab){case"everyDays":this.ngModel=this.state.daily.everyDays.seconds+" "+this.state.daily.everyDays.minutes+" "+this.hourToCron(this.state.daily.everyDays.hours,this.state.daily.everyDays.hourType)+" 1/"+this.state.daily.everyDays.days+" * ? *";break;case"everyWeekDay":this.ngModel=this.state.daily.everyWeekDay.seconds+" "+this.state.daily.everyWeekDay.minutes+" "+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 t=this.selectOptions.days.reduce(function(t,n){return e.state.weekly[n]?t.concat([n]):t},[]).join(",");this.ngModel=this.state.weekly.seconds+" "+this.state.weekly.minutes+" "+this.hourToCron(this.state.weekly.hours,this.state.weekly.hourType)+" ? * "+t+" *";break;case"monthly":switch(this.state.monthly.subTab){case"specificDay":this.ngModel=this.state.monthly.specificDay.seconds+" "+this.state.monthly.specificDay.minutes+" "+this.hourToCron(this.state.monthly.specificDay.hours,this.state.monthly.specificDay.hourType)+" "+this.state.monthly.specificDay.day+" 1/"+this.state.monthly.specificDay.months+" ? *";break;case"specificWeekDay":this.ngModel=this.state.monthly.specificWeekDay.seconds+" "+this.state.monthly.specificWeekDay.minutes+" "+this.hourToCron(this.state.monthly.specificWeekDay.hours,this.state.monthly.specificWeekDay.hourType)+" ? 1/"+this.state.monthly.specificWeekDay.months+" "+this.state.monthly.specificWeekDay.day+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=this.state.yearly.specificMonthDay.seconds+" "+this.state.yearly.specificMonthDay.minutes+" "+this.hourToCron(this.state.yearly.specificMonthDay.hours,this.state.yearly.specificMonthDay.hourType)+" "+this.state.yearly.specificMonthDay.day+" "+this.state.yearly.specificMonthDay.month+" ? *";break;case"specificMonthWeek":this.ngModel=this.state.yearly.specificMonthWeek.seconds+" "+this.state.yearly.specificMonthWeek.minutes+" "+this.hourToCron(this.state.yearly.specificMonthWeek.hours,this.state.yearly.specificMonthWeek.hourType)+" ? "+this.state.yearly.specificMonthWeek.month+" "+this.state.yearly.specificMonthWeek.day+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(e){var t=this;if(this.currentState===c.DIRTY)return void(this.currentState=c.CLEAN);this.currentState=c.CLEAN;var s=e.split(" ");if(6!==s.length&&7!==s.length)throw"Unsupported cron expression. Expression must be 6 or 7 segments";var a=n(s,6),r=a[0],i=a[1],l=a[2],o=a[3],d=a[4],h=a[5];if(e.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/))this.activeTab="minutes",this.state.minutes.minutes=parseInt(i.substring(2)),this.state.minutes.seconds=parseInt(r);else if(e.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/))this.activeTab="hourly",this.state.hourly.hours=parseInt(l.substring(2)),this.state.hourly.minutes=parseInt(i),this.state.hourly.seconds=parseInt(r);else if(e.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)){this.activeTab="daily",this.state.daily.subTab="everyDays",this.state.daily.everyDays.days=parseInt(o.substring(2));var y=parseInt(l);this.state.daily.everyDays.hours=this.processHour(y),this.state.daily.everyDays.hourType=this.getHourType(y),this.state.daily.everyDays.minutes=parseInt(i),this.state.daily.everyDays.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)){this.activeTab="daily",this.state.daily.subTab="everyWeekDay";var u=parseInt(l);this.state.daily.everyWeekDay.hours=this.processHour(u),this.state.daily.everyWeekDay.hourType=this.getHourType(u),this.state.daily.everyWeekDay.minutes=parseInt(i),this.state.daily.everyWeekDay.seconds=parseInt(r)}else if(e.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(e){return t.state.weekly[e]=!1}),h.split(",").forEach(function(e){return t.state.weekly[e]=!0});var p=parseInt(l);this.state.weekly.hours=this.processHour(p),this.state.weekly.hourType=this.getHourType(p),this.state.weekly.minutes=parseInt(i),this.state.weekly.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)){this.activeTab="monthly",this.state.monthly.subTab="specificDay",this.state.monthly.specificDay.day=o,this.state.monthly.specificDay.months=parseInt(d.substring(2));var m=parseInt(l);this.state.monthly.specificDay.hours=this.processHour(m),this.state.monthly.specificDay.hourType=this.getHourType(m),this.state.monthly.specificDay.minutes=parseInt(i),this.state.monthly.specificDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var g=h.substr(0,3),b=h.substr(3);this.activeTab="monthly",this.state.monthly.subTab="specificWeekDay",this.state.monthly.specificWeekDay.monthWeek=b,this.state.monthly.specificWeekDay.day=g,this.state.monthly.specificWeekDay.months=parseInt(d.substring(2));var $=parseInt(l);this.state.monthly.specificWeekDay.hours=this.processHour($),this.state.monthly.specificWeekDay.hourType=this.getHourType($),this.state.monthly.specificWeekDay.minutes=parseInt(i),this.state.monthly.specificWeekDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)){this.activeTab="yearly",this.state.yearly.subTab="specificMonthDay",this.state.yearly.specificMonthDay.month=parseInt(d),this.state.yearly.specificMonthDay.day=o;var v=parseInt(l);this.state.yearly.specificMonthDay.hours=this.processHour(v),this.state.yearly.specificMonthDay.hourType=this.getHourType(v),this.state.yearly.specificMonthDay.minutes=parseInt(i),this.state.yearly.specificMonthDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var f=h.substr(0,3),T=h.substr(3);this.activeTab="yearly",this.state.yearly.subTab="specificMonthWeek",this.state.yearly.specificMonthWeek.monthWeek=T,this.state.yearly.specificMonthWeek.day=f,this.state.yearly.specificMonthWeek.month=parseInt(d);var D=parseInt(l);this.state.yearly.specificMonthWeek.hours=this.processHour(D),this.state.yearly.specificMonthWeek.hourType=this.getHourType(D),this.state.yearly.specificMonthWeek.minutes=parseInt(i),this.state.yearly.specificMonthWeek.seconds=parseInt(r)}else this.activeTab="advanced",this.state.advanced.expression=e}}]),s}(),d=/^\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}))?)*))$/,h=function(){function n(){e(this,n)}return t(n,[{key:"isValid",value:function(e,t){var n=t.toUpperCase();switch(e){case"quartz":return!!n.match(d);default:throw"Desired cron format ("+e+") is not available"}}},{key:"appendInt",value:function(e){var t=""+e;if(t.length>1){var n=t.charAt(t.length-2);if("1"===n)return"th"}var s=t.charAt(t.length-1);switch(s){case"1":return"st";case"2":return"nd";case"3":return"rd";default:return"th"}}},{key:"padNumber",value:function(e){return 1===(""+e).length?"0"+e:""+e}},{key:"range",value:function(e,t){if("undefined"==typeof t&&(t=e,e=0),e<0||t<0)throw"Range values must be positive values";return t>e?[].concat(s(new Array(t-e))).map(function(t,n){return n+e}):e\n \n \n \n \n'),e.put("angular-cron-gen/cron-gen.html",'\n
\n \n
\n
\n
\n
\n
\n
\n Every\n \n minute(s)\n on second\n \n
\n
\n
\n
\n Every\n \n hour(s) on minute\n \n and second\n \n
\n
\n
\n
\n \n Every\n \n day(s) at\n \n \n
\n
\n \n Every week day (Monday through Friday) at\n \n \n
\n
\n
\n
\n
\n \n Monday\n
\n
\n \n Tuesday\n
\n
\n \n Wednesday\n
\n
\n \n Thursday\n
\n
\n \n Friday\n
\n
\n \n Saturday\n
\n
\n \n Sunday\n
\n
\n Start time\n \n \n
\n
\n
\n \n On the\n \n of every\n \n month(s) at\n \n \n
\n
\n \n On the\n \n \n of every\n \n month(s) at\n \n \n
\n\n
\n
\n
\n \n Every\n \n on the\n \n at\n \n \n
\n
\n \n On the\n \n \n of\n \n at\n \n \n
\n
\n
\n Cron Expression\n \n\n

More details about how to create these expressions can be found here.

\n
\n
\n
\n
\n
\n
\n'); +!function(){"use strict";var e=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t=function(){function e(e,t){for(var n=0;n=12?"PM":"AM"}},{key:"hourToCron",value:function(e,t){return this.parsedOptions.use24HourTime?e:"AM"===t?12===e?0:e:12===e?12:e+12}},{key:"mergeDefaultOptions",value:function(e){return angular.extend({formInputClass:"form-control cron-gen-input",formSelectClass:"form-control cron-gen-select",formRadioClass:"form-control-static cron-gen-radio",formCheckboxClass:"form-control-static cron-gen-checkbox",hideMinutesTab:!1,hideHourlyTab:!1,hideDailyTab:!1,hideWeeklyTab:!1,hideMonthlyTab:!1,hideYearlyTab:!1,hideAdvancedTab:!0,use24HourTime:!1,hideSeconds:!1,language:"en"},e)}},{key:"regenerateCron",value:function(){var e=this;switch(this.currentState=c.DIRTY,this.activeTab){case"minutes":this.ngModel=this.state.minutes.seconds+" 0/"+this.state.minutes.minutes+" * 1/1 * ? *";break;case"hourly":this.ngModel=this.state.hourly.seconds+" "+this.state.hourly.minutes+" 0/"+this.state.hourly.hours+" 1/1 * ? *";break;case"daily":switch(this.state.daily.subTab){case"everyDays":this.ngModel=this.state.daily.everyDays.seconds+" "+this.state.daily.everyDays.minutes+" "+this.hourToCron(this.state.daily.everyDays.hours,this.state.daily.everyDays.hourType)+" 1/"+this.state.daily.everyDays.days+" * ? *";break;case"everyWeekDay":this.ngModel=this.state.daily.everyWeekDay.seconds+" "+this.state.daily.everyWeekDay.minutes+" "+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 t=this.selectOptions.days.reduce(function(t,n){return e.state.weekly[n]?t.concat([n]):t},[]).join(",");this.ngModel=this.state.weekly.seconds+" "+this.state.weekly.minutes+" "+this.hourToCron(this.state.weekly.hours,this.state.weekly.hourType)+" ? * "+t+" *";break;case"monthly":switch(this.state.monthly.subTab){case"specificDay":this.ngModel=this.state.monthly.specificDay.seconds+" "+this.state.monthly.specificDay.minutes+" "+this.hourToCron(this.state.monthly.specificDay.hours,this.state.monthly.specificDay.hourType)+" "+this.state.monthly.specificDay.day+" 1/"+this.state.monthly.specificDay.months+" ? *";break;case"specificWeekDay":this.ngModel=this.state.monthly.specificWeekDay.seconds+" "+this.state.monthly.specificWeekDay.minutes+" "+this.hourToCron(this.state.monthly.specificWeekDay.hours,this.state.monthly.specificWeekDay.hourType)+" ? 1/"+this.state.monthly.specificWeekDay.months+" "+this.state.monthly.specificWeekDay.day+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=this.state.yearly.specificMonthDay.seconds+" "+this.state.yearly.specificMonthDay.minutes+" "+this.hourToCron(this.state.yearly.specificMonthDay.hours,this.state.yearly.specificMonthDay.hourType)+" "+this.state.yearly.specificMonthDay.day+" "+this.state.yearly.specificMonthDay.month+" ? *";break;case"specificMonthWeek":this.ngModel=this.state.yearly.specificMonthWeek.seconds+" "+this.state.yearly.specificMonthWeek.minutes+" "+this.hourToCron(this.state.yearly.specificMonthWeek.hours,this.state.yearly.specificMonthWeek.hourType)+" ? "+this.state.yearly.specificMonthWeek.month+" "+this.state.yearly.specificMonthWeek.day+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(e){var t=this;if(this.currentState===c.DIRTY)return void(this.currentState=c.CLEAN);this.currentState=c.CLEAN;var s=e.split(" ");if(6!==s.length&&7!==s.length)throw"Unsupported cron expression. Expression must be 6 or 7 segments";var a=n(s,6),r=a[0],i=a[1],l=a[2],o=a[3],d=a[4],h=a[5];if(e.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/))this.activeTab="minutes",this.state.minutes.minutes=parseInt(i.substring(2)),this.state.minutes.seconds=parseInt(r);else if(e.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/))this.activeTab="hourly",this.state.hourly.hours=parseInt(l.substring(2)),this.state.hourly.minutes=parseInt(i),this.state.hourly.seconds=parseInt(r);else if(e.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)){this.activeTab="daily",this.state.daily.subTab="everyDays",this.state.daily.everyDays.days=parseInt(o.substring(2));var y=parseInt(l);this.state.daily.everyDays.hours=this.processHour(y),this.state.daily.everyDays.hourType=this.getHourType(y),this.state.daily.everyDays.minutes=parseInt(i),this.state.daily.everyDays.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)){this.activeTab="daily",this.state.daily.subTab="everyWeekDay";var u=parseInt(l);this.state.daily.everyWeekDay.hours=this.processHour(u),this.state.daily.everyWeekDay.hourType=this.getHourType(u),this.state.daily.everyWeekDay.minutes=parseInt(i),this.state.daily.everyWeekDay.seconds=parseInt(r)}else if(e.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(e){return t.state.weekly[e]=!1}),h.split(",").forEach(function(e){return t.state.weekly[e]=!0});var p=parseInt(l);this.state.weekly.hours=this.processHour(p),this.state.weekly.hourType=this.getHourType(p),this.state.weekly.minutes=parseInt(i),this.state.weekly.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)){this.activeTab="monthly",this.state.monthly.subTab="specificDay",this.state.monthly.specificDay.day=o,this.state.monthly.specificDay.months=parseInt(d.substring(2));var m=parseInt(l);this.state.monthly.specificDay.hours=this.processHour(m),this.state.monthly.specificDay.hourType=this.getHourType(m),this.state.monthly.specificDay.minutes=parseInt(i),this.state.monthly.specificDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var g=h.substr(0,3),b=h.substr(3);this.activeTab="monthly",this.state.monthly.subTab="specificWeekDay",this.state.monthly.specificWeekDay.monthWeek=b,this.state.monthly.specificWeekDay.day=g,this.state.monthly.specificWeekDay.months=parseInt(d.substring(2));var $=parseInt(l);this.state.monthly.specificWeekDay.hours=this.processHour($),this.state.monthly.specificWeekDay.hourType=this.getHourType($),this.state.monthly.specificWeekDay.minutes=parseInt(i),this.state.monthly.specificWeekDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)){this.activeTab="yearly",this.state.yearly.subTab="specificMonthDay",this.state.yearly.specificMonthDay.month=parseInt(d),this.state.yearly.specificMonthDay.day=o;var T=parseInt(l);this.state.yearly.specificMonthDay.hours=this.processHour(T),this.state.yearly.specificMonthDay.hourType=this.getHourType(T),this.state.yearly.specificMonthDay.minutes=parseInt(i),this.state.yearly.specificMonthDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var v=h.substr(0,3),f=h.substr(3);this.activeTab="yearly",this.state.yearly.subTab="specificMonthWeek",this.state.yearly.specificMonthWeek.monthWeek=f,this.state.yearly.specificMonthWeek.day=v,this.state.yearly.specificMonthWeek.month=parseInt(d);var D=parseInt(l);this.state.yearly.specificMonthWeek.hours=this.processHour(D),this.state.yearly.specificMonthWeek.hourType=this.getHourType(D),this.state.yearly.specificMonthWeek.minutes=parseInt(i),this.state.yearly.specificMonthWeek.seconds=parseInt(r)}else this.activeTab="advanced",this.state.advanced.expression=e}}]),s}(),d=/^\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}))?)*))$/,h=function(){function n(){e(this,n)}return t(n,[{key:"isValid",value:function(e,t){var n=t.toUpperCase();switch(e){case"quartz":return!!n.match(d);default:throw"Desired cron format ("+e+") is not available"}}},{key:"appendInt",value:function(e){var t=""+e;if(t.length>1){if("1"===t.charAt(t.length-2))return"th"}switch(t.charAt(t.length-1)){case"1":return"st";case"2":return"nd";case"3":return"rd";default:return"th"}}},{key:"padNumber",value:function(e){return 1===(""+e).length?"0"+e:""+e}},{key:"range",value:function(e,t){if(void 0===t&&(t=e,e=0),e<0||t<0)throw"Range values must be positive values";return t>e?[].concat(s(new Array(t-e))).map(function(t,n){return n+e}):e\n \n \n \n \n'), +e.put("angular-cron-gen/cron-gen.html",'\n
\n \n
\n
\n
\n
\n
\n
\n {{ \'EVERY\' | translate}}\n \n {{ \'MINUTE\' | translate}}\n {{ \'ON_SECOND\' | translate }} \n \n
\n
\n
\n
\n {{ \'EVERY\' | translate}}\n \n {{ \'HOUR_ON_MINUTE\' | translate}}\n \n {{ \'AND_SECOND\' | translate}}\n \n
\n
\n
\n
\n \n {{ \'EVERY\' | translate}}\n \n {{ \'DAY_AT\' | translate}}\n \n \n
\n
\n \n {{ \'EVERY_WEEK_WORKING_DAY\' | translate}}\n \n \n
\n
\n
\n
\n
\n \n {{ \'MONDAY\' | translate}}\n
\n
\n \n {{ \'TUESDAY\' | translate}}\n
\n
\n \n {{ \'WEDNESDAY\' | translate}}\n
\n
\n \n {{ \'THURSDAY\' | translate}}\n
\n
\n \n {{ \'FRIDAY\' | translate}}\n
\n
\n \n {{ \'SATURDAY\' | translate}}\n
\n
\n \n {{ \'SUNDAY\' | translate}}\n
\n
\n {{ \'START_TIME\' | translate}}\n \n \n
\n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
\n\n
\n
\n
\n \n {{ \'EVERY\' | translate}}\n \n {{ \'ON_THE\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
\n
\n
\n {{ \'CRON_EXPRESSION\' | translate}}\n \n\n

{{ \'MORE_DETAILS\' | translate}} {{ \'HERE\' | translate}}.

\n
\n
\n
\n
\n
\n
\n') }]); //# sourceMappingURL=cron-gen.min.js.map diff --git a/build/cron-gen.min.js.map b/build/cron-gen.min.js.map index 8c04765f..e91c128a 100644 --- a/build/cron-gen.min.js.map +++ b/build/cron-gen.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["cron-gen.module.js","templates.js"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","err","Array","isArray","toConsumableArray","arr2","from","ACCEPTABLE_CRON_FORMATS","DAY_LOOKUPS","SUN","MON","TUE","WED","THU","FRI","SAT","MONTH_WEEK_LOOKUPS","#1","#2","#3","#4","#5","L","MONTH_LOOKUPS","1","2","3","4","5","6","7","8","9","10","11","12","States","INIT","DIRTY","CLEAN","CronGenComponent","$scope","cronGenService","_this","this","parsedOptions","mergeDefaultOptions","options","angular","extend","cronFormat","currentState","activeTab","hideMinutesTab","hideHourlyTab","hideDailyTab","hideWeeklyTab","hideMonthlyTab","hideYearlyTab","hideAdvancedTab","selectOptions","state","minutes","seconds","hourly","hours","daily","subTab","everyDays","days","use24HourTime","hourType","everyWeekDay","weekly","monthly","specificDay","day","months","specificWeekDay","monthWeek","yearly","specificMonthDay","month","specificMonthWeek","advanced","expression","indexOf","$watch","cron","handleModelChange","_this2","formCtrl","name","ngModelCtrl","$validators","testCronExpr","isValid","$event","tab","preventDefault","ngDisabled","regenerateCron","monthWeekNumber","monthNumber","monthDay","appendInt","hour","formInputClass","formSelectClass","formRadioClass","formCheckboxClass","hideSeconds","_this3","ngModel","hourToCron","reduce","acc","concat","join","_this4","segments","split","_segments","dayOfMonth","dayOfWeek","match","parseInt","substring","parsedHours","processHour","getHourType","_parsedHours","forEach","weekDay","_parsedHours2","_parsedHours3","substr","_parsedHours4","_parsedHours5","_day","_monthWeek","_parsedHours6","QUARTZ_REGEX","CronGenService","formattedExpression","toUpperCase","number","secondToLastDigit","charAt","lastDigit","start","end","map","val","idx","range","monthWeeks","fullMinutes","monthDays","monthDaysWithLasts","CronGenTimeSelect","hourTypes","module","service","component","bindings","isDisabled","onChange","isRequired","model","selectClass","namePrefix","templateUrl","controller","require","ngDisabledCtrl","$attrs","$templateCache","put"],"mappings":"CAAC,WACD,YAEA,IAAIA,GAAiB,SAAUC,EAAUC,GACvC,KAAMD,YAAoBC,IACxB,KAAM,IAAIC,WAAU,sCAIpBC,EAAc,WAChB,QAASC,GAAiBC,EAAQC,GAChC,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,GAAIE,GAAaH,EAAMC,EACvBE,GAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,SAAWF,KAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAIlD,MAAO,UAAUR,EAAae,EAAYC,GAGxC,MAFID,IAAYZ,EAAiBH,EAAYiB,UAAWF,GACpDC,GAAab,EAAiBH,EAAagB,GACxChB,MAyEPkB,EAAgB,WAClB,QAASC,GAAcC,EAAKd,GAC1B,GAAIe,MACAC,GAAK,EACLC,GAAK,EACLC,EAAKC,MAET,KACE,IAAK,GAAiCC,GAA7BC,EAAKP,EAAIQ,OAAOC,cAAmBP,GAAMI,EAAKC,EAAGG,QAAQC,QAChEV,EAAKW,KAAKN,EAAGO,QAET3B,GAAKe,EAAKd,SAAWD,GAH8CgB,GAAK,IAK9E,MAAOY,GACPX,GAAK,EACLC,EAAKU,UAEL,KACOZ,GAAMK,EAAG,QAAWA,EAAG,iBAE5B,GAAIJ,EAAI,KAAMC,IAIlB,MAAOH,GAGT,MAAO,UAAUD,EAAKd,GACpB,GAAI6B,MAAMC,QAAQhB,GAChB,MAAOA,EACF,IAAIQ,OAAOC,WAAYjB,QAAOQ,GACnC,MAAOD,GAAcC,EAAKd,EAE1B,MAAM,IAAIL,WAAU,4DAiBtBoC,EAAoB,SAAUjB,GAChC,GAAIe,MAAMC,QAAQhB,GAAM,CACtB,IAAK,GAAId,GAAI,EAAGgC,EAAOH,MAAMf,EAAIb,QAASD,EAAIc,EAAIb,OAAQD,IAAKgC,EAAKhC,GAAKc,EAAId,EAE7E,OAAOgC,GAEP,MAAOH,OAAMI,KAAKnB,IAIlBoB,GAA2B,UAC3BC,GACAC,IAAO,SACPC,IAAO,SACPC,IAAO,UACPC,IAAO,YACPC,IAAO,WACPC,IAAO,SACPC,IAAO,YAEPC,GACAC,KAAM,QACNC,KAAM,SACNC,KAAM,QACNC,KAAM,SACNC,KAAM,QACNC,EAAK,QAELC,GACAC,EAAK,UACLC,EAAK,WACLC,EAAK,QACLC,EAAK,QACLC,EAAK,MACLC,EAAK,OACLC,EAAK,OACLC,EAAK,SACLC,EAAK,YACLC,GAAM,UACNC,GAAM,WACNC,GAAM,YAGNC,GACAC,KAAM,EACNC,MAAO,EACPC,MAAO,gBAIP,QAASC,GAAiBC,EAAQC,GAC9B,UAEA,IAAIC,GAAQC,IAkHZ,IAhHA/E,EAAe+E,KAAMJ,GACrBI,KAAKC,cAAgBD,KAAKE,oBAAoBF,KAAKG,SAEnDC,QAAQC,OAAOL,MACXF,eAAgBA,EAChBQ,WAAY,SACZC,aAAcf,EAAOC,KACrBe,UAAW,WACP,IAAKT,EAAME,cAAcQ,eACrB,MAAO,SACJ,KAAKV,EAAME,cAAcS,cAC5B,MAAO,QACJ,KAAKX,EAAME,cAAcU,aAC5B,MAAO,OACJ,KAAKZ,EAAME,cAAcW,cAC5B,MAAO,QACJ,KAAKb,EAAME,cAAcY,eAC5B,MAAO,SACJ,KAAKd,EAAME,cAAca,cAC5B,MAAO,QACJ,KAAKf,EAAME,cAAcc,gBAC5B,MAAO,UAEX,MAAM,sCAEVC,cAAelB,EAAekB,gBAC9BC,OACIC,SACIA,QAAS,EACTC,QAAS,GAEbC,QACIC,MAAO,EACPH,QAAS,EACTC,QAAS,GAEbG,OACIC,OAAQ,YACRC,WACIC,KAAM,EACNJ,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,MAExDE,cACIP,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,OAG5DG,QACI/D,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLN,KAAK,EACLwD,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,MAExDI,SACIP,OAAQ,cACRQ,aACIC,IAAK,IACLC,OAAQ,EACRZ,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,MAExDQ,iBACIC,UAAW,KACXH,IAAK,MACLC,OAAQ,EACRZ,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,OAG5DU,QACIb,OAAQ,mBACRc,kBACIC,MAAO,EACPN,IAAK,IACLX,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,MAExDa,mBACIJ,UAAW,KACXH,IAAK,MACLM,MAAO,EACPjB,MAAOrB,KAAKC,cAAcyB,cAAgB,EAAI,EAC9CR,QAAS,EACTC,QAAS,EACTQ,SAAU3B,KAAKC,cAAcyB,cAAgB,KAAO,OAG5Dc,UACIC,WAAY,sBAMpB9E,EAAwB+E,QAAQ1C,KAAKM,cAAe,EACpD,KAAM,wBAA0BN,KAAKM,WAAa,oBAItDT,GAAO8C,OAAO,gBAAiB,SAAUC,GACrC,MAAO7C,GAAM8C,kBAAkBD,KAInC/C,EAAO8C,OAAO,gBAAiB,SAAUxC,GACrC,MAAOJ,GAAME,cAAgBF,EAAMG,oBAAoBC,KACxD,GAgRP,6CA7QA9E,EAAYuE,IACR3D,IAAK,UACLmB,MAAO,WACH,GAAI0F,GAAS9C,IAGTA,MAAK+C,UAAY/C,KAAKgD,OACtBhD,KAAKiD,YAAYC,YAAYC,aAAe,SAAUV,GAClD,MAAOK,GAAOhD,eAAesD,QAAQN,EAAOxC,WAAYmC,QAKpExG,IAAK,eACLmB,MAAO,SAAsBiG,EAAQC,GACjCD,EAAOE,iBACFvD,KAAKwD,aACNxD,KAAKQ,UAAY8C,EACjBtD,KAAKyD,qBAIbxH,IAAK,aACLmB,MAAO,SAAoB4E,GACvB,MAAOpE,GAAYoE,MAGvB/F,IAAK,mBACLmB,MAAO,SAA0BsG,GAC7B,MAAOtF,GAAmBsF,MAG9BzH,IAAK,eACLmB,MAAO,SAAsBuG,GACzB,MAAOhF,GAAcgF,MAGzB1H,IAAK,kBACLmB,MAAO,SAAyBwG,GAC5B,MAAiB,MAAbA,EACO,WACa,OAAbA,EACA,eACa,OAAbA,EACA,gBAEA,GAAKA,EAAW5D,KAAKF,eAAe+D,UAAUD,GAAY,UAIzE3H,IAAK,cACLmB,MAAO,SAAqBiE,GACxB,MAAIrB,MAAKC,cAAcyB,cACZL,GAECA,EAAQ,IAAM,GAAK,KAInCpF,IAAK,cACLmB,MAAO,SAAqBiE,GACxB,MAAOrB,MAAKC,cAAcyB,cAAgB,KAAOL,GAAS,GAAK,KAAO,QAG1EpF,IAAK,aACLmB,MAAO,SAAoB0G,EAAMnC,GAC7B,MAAI3B,MAAKC,cAAcyB,cACZoC,EAEa,OAAbnC,EAA6B,KAATmC,EAAc,EAAIA,EAAgB,KAATA,EAAc,GAAKA,EAAO,MAItF7H,IAAK,sBACLmB,MAAO,SAA6B+C,GAChC,MAAOC,SAAQC,QACX0D,eAAgB,8BAChBC,gBAAiB,+BACjBC,eAAgB,qCAChBC,kBAAmB,wCACnBzD,gBAAgB,EAChBC,eAAe,EACfC,cAAc,EACdC,eAAe,EACfC,gBAAgB,EAChBC,eAAe,EACfC,iBAAiB,EACjBW,eAAe,EACfyC,aAAa,GACdhE,MAGPlE,IAAK,iBACLmB,MAAO,WACH,GAAIgH,GAASpE,IAGb,QADAA,KAAKO,aAAef,EAAOE,MACnBM,KAAKQ,WACT,IAAK,UACDR,KAAKqE,QAAUrE,KAAKiB,MAAMC,QAAQC,QAAU,MAAQnB,KAAKiB,MAAMC,QAAQA,QAAU,cACjF,MACJ,KAAK,SACDlB,KAAKqE,QAAUrE,KAAKiB,MAAMG,OAAOD,QAAU,IAAMnB,KAAKiB,MAAMG,OAAOF,QAAU,MAAQlB,KAAKiB,MAAMG,OAAOC,MAAQ,YAC/G,MACJ,KAAK,QACD,OAAQrB,KAAKiB,MAAMK,MAAMC,QACrB,IAAK,YACDvB,KAAKqE,QAAUrE,KAAKiB,MAAMK,MAAME,UAAUL,QAAU,IAAMnB,KAAKiB,MAAMK,MAAME,UAAUN,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMK,MAAME,UAAUH,MAAOrB,KAAKiB,MAAMK,MAAME,UAAUG,UAAY,MAAQ3B,KAAKiB,MAAMK,MAAME,UAAUC,KAAO,QACxO,MACJ,KAAK,eACDzB,KAAKqE,QAAUrE,KAAKiB,MAAMK,MAAMM,aAAaT,QAAU,IAAMnB,KAAKiB,MAAMK,MAAMM,aAAaV,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMK,MAAMM,aAAaP,MAAOrB,KAAKiB,MAAMK,MAAMM,aAAaD,UAAY,gBAC1M,MACJ,SACI,KAAM,sCAEd,KACJ,KAAK,SACD,GAAIF,GAAOzB,KAAKgB,cAAcS,KAAK8C,OAAO,SAAUC,EAAKxC,GACrD,MAAOoC,GAAOnD,MAAMY,OAAOG,GAAOwC,EAAIC,QAAQzC,IAAQwC,OACnDE,KAAK,IACZ1E,MAAKqE,QAAUrE,KAAKiB,MAAMY,OAAOV,QAAU,IAAMnB,KAAKiB,MAAMY,OAAOX,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMY,OAAOR,MAAOrB,KAAKiB,MAAMY,OAAOF,UAAY,QAAUF,EAAO,IAC3K,MACJ,KAAK,UACD,OAAQzB,KAAKiB,MAAMa,QAAQP,QACvB,IAAK,cACDvB,KAAKqE,QAAUrE,KAAKiB,MAAMa,QAAQC,YAAYZ,QAAU,IAAMnB,KAAKiB,MAAMa,QAAQC,YAAYb,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMa,QAAQC,YAAYV,MAAOrB,KAAKiB,MAAMa,QAAQC,YAAYJ,UAAY,IAAM3B,KAAKiB,MAAMa,QAAQC,YAAYC,IAAM,MAAQhC,KAAKiB,MAAMa,QAAQC,YAAYE,OAAS,MACzS,MACJ,KAAK,kBACDjC,KAAKqE,QAAUrE,KAAKiB,MAAMa,QAAQI,gBAAgBf,QAAU,IAAMnB,KAAKiB,MAAMa,QAAQI,gBAAgBhB,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMa,QAAQI,gBAAgBb,MAAOrB,KAAKiB,MAAMa,QAAQI,gBAAgBP,UAAY,QAAU3B,KAAKiB,MAAMa,QAAQI,gBAAgBD,OAAS,IAAMjC,KAAKiB,MAAMa,QAAQI,gBAAgBF,IAAMhC,KAAKiB,MAAMa,QAAQI,gBAAgBC,UAAY,IAClX,MACJ,SACI,KAAM,wCAEd,KACJ,KAAK,SACD,OAAQnC,KAAKiB,MAAMmB,OAAOb,QACtB,IAAK,mBACDvB,KAAKqE,QAAUrE,KAAKiB,MAAMmB,OAAOC,iBAAiBlB,QAAU,IAAMnB,KAAKiB,MAAMmB,OAAOC,iBAAiBnB,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMmB,OAAOC,iBAAiBhB,MAAOrB,KAAKiB,MAAMmB,OAAOC,iBAAiBV,UAAY,IAAM3B,KAAKiB,MAAMmB,OAAOC,iBAAiBL,IAAM,IAAMhC,KAAKiB,MAAMmB,OAAOC,iBAAiBC,MAAQ,MAC9T,MACJ,KAAK,oBACDtC,KAAKqE,QAAUrE,KAAKiB,MAAMmB,OAAOG,kBAAkBpB,QAAU,IAAMnB,KAAKiB,MAAMmB,OAAOG,kBAAkBrB,QAAU,IAAMlB,KAAKsE,WAAWtE,KAAKiB,MAAMmB,OAAOG,kBAAkBlB,MAAOrB,KAAKiB,MAAMmB,OAAOG,kBAAkBZ,UAAY,MAAQ3B,KAAKiB,MAAMmB,OAAOG,kBAAkBD,MAAQ,IAAMtC,KAAKiB,MAAMmB,OAAOG,kBAAkBP,IAAMhC,KAAKiB,MAAMmB,OAAOG,kBAAkBJ,UAAY,IACtX,MACJ,SACI,KAAM,uCAEd,KACJ,KAAK,WACDnC,KAAKqE,QAAUrE,KAAKiB,MAAMuB,SAASC,UACnC,MACJ,SACI,KAAM,wCAIlBxG,IAAK,oBACLmB,MAAO,SAA2BwF,GAC9B,GAAI+B,GAAS3E,IAEb,IAAIA,KAAKO,eAAiBf,EAAOE,MAE7B,YADAM,KAAKO,aAAef,EAAOG,MAG3BK,MAAKO,aAAef,EAAOG,KAG/B,IAAIiF,GAAWhC,EAAKiC,MAAM,IAC1B,IAAwB,IAApBD,EAASlJ,QAAoC,IAApBkJ,EAASlJ,OAmGlC,KAAM,iEAlGN,IAAIoJ,GAAYzI,EAAcuI,EAAU,GACpCzD,EAAU2D,EAAU,GACpB5D,EAAU4D,EAAU,GACpBzD,EAAQyD,EAAU,GAClBC,EAAaD,EAAU,GACvBxC,EAAQwC,EAAU,GAClBE,EAAYF,EAAU,EAE1B,IAAIlC,EAAKqC,MAAM,+BACXjF,KAAKQ,UAAY,UACjBR,KAAKiB,MAAMC,QAAQA,QAAUgE,SAAShE,EAAQiE,UAAU,IACxDnF,KAAKiB,MAAMC,QAAQC,QAAU+D,SAAS/D,OACnC,IAAIyB,EAAKqC,MAAM,gCAClBjF,KAAKQ,UAAY,SACjBR,KAAKiB,MAAMG,OAAOC,MAAQ6D,SAAS7D,EAAM8D,UAAU,IACnDnF,KAAKiB,MAAMG,OAAOF,QAAUgE,SAAShE,GACrClB,KAAKiB,MAAMG,OAAOD,QAAU+D,SAAS/D,OAClC,IAAIyB,EAAKqC,MAAM,+BAAgC,CAClDjF,KAAKQ,UAAY,QACjBR,KAAKiB,MAAMK,MAAMC,OAAS,YAC1BvB,KAAKiB,MAAMK,MAAME,UAAUC,KAAOyD,SAASH,EAAWI,UAAU,GAChE,IAAIC,GAAcF,SAAS7D,EAC3BrB,MAAKiB,MAAMK,MAAME,UAAUH,MAAQrB,KAAKqF,YAAYD,GACpDpF,KAAKiB,MAAMK,MAAME,UAAUG,SAAW3B,KAAKsF,YAAYF,GACvDpF,KAAKiB,MAAMK,MAAME,UAAUN,QAAUgE,SAAShE,GAC9ClB,KAAKiB,MAAMK,MAAME,UAAUL,QAAU+D,SAAS/D,OAC3C,IAAIyB,EAAKqC,MAAM,gCAAiC,CACnDjF,KAAKQ,UAAY,QACjBR,KAAKiB,MAAMK,MAAMC,OAAS,cAC1B,IAAIgE,GAAeL,SAAS7D,EAC5BrB,MAAKiB,MAAMK,MAAMM,aAAaP,MAAQrB,KAAKqF,YAAYE,GACvDvF,KAAKiB,MAAMK,MAAMM,aAAaD,SAAW3B,KAAKsF,YAAYC,GAC1DvF,KAAKiB,MAAMK,MAAMM,aAAaV,QAAUgE,SAAShE,GACjDlB,KAAKiB,MAAMK,MAAMM,aAAaT,QAAU+D,SAAS/D,OAC9C,IAAIyB,EAAKqC,MAAM,uFAAwF,CAC1GjF,KAAKQ,UAAY,SACjBR,KAAKgB,cAAcS,KAAK+D,QAAQ,SAAUC,GACtC,MAAOd,GAAO1D,MAAMY,OAAO4D,IAAW,IAE1CT,EAAUH,MAAM,KAAKW,QAAQ,SAAUC,GACnC,MAAOd,GAAO1D,MAAMY,OAAO4D,IAAW,GAE1C,IAAIC,GAAgBR,SAAS7D,EAC7BrB,MAAKiB,MAAMY,OAAOR,MAAQrB,KAAKqF,YAAYK,GAC3C1F,KAAKiB,MAAMY,OAAOF,SAAW3B,KAAKsF,YAAYI,GAC9C1F,KAAKiB,MAAMY,OAAOX,QAAUgE,SAAShE,GACrClB,KAAKiB,MAAMY,OAAOV,QAAU+D,SAAS/D,OAClC,IAAIyB,EAAKqC,MAAM,0CAA2C,CAC7DjF,KAAKQ,UAAY,UACjBR,KAAKiB,MAAMa,QAAQP,OAAS,cAC5BvB,KAAKiB,MAAMa,QAAQC,YAAYC,IAAM+C,EACrC/E,KAAKiB,MAAMa,QAAQC,YAAYE,OAASiD,SAAS5C,EAAM6C,UAAU,GACjE,IAAIQ,GAAgBT,SAAS7D,EAC7BrB,MAAKiB,MAAMa,QAAQC,YAAYV,MAAQrB,KAAKqF,YAAYM,GACxD3F,KAAKiB,MAAMa,QAAQC,YAAYJ,SAAW3B,KAAKsF,YAAYK,GAC3D3F,KAAKiB,MAAMa,QAAQC,YAAYb,QAAUgE,SAAShE,GAClDlB,KAAKiB,MAAMa,QAAQC,YAAYZ,QAAU+D,SAAS/D,OAC/C,IAAIyB,EAAKqC,MAAM,sEAAuE,CACzF,GAAIjD,GAAMgD,EAAUY,OAAO,EAAG,GAC1BzD,EAAY6C,EAAUY,OAAO,EACjC5F,MAAKQ,UAAY,UACjBR,KAAKiB,MAAMa,QAAQP,OAAS,kBAC5BvB,KAAKiB,MAAMa,QAAQI,gBAAgBC,UAAYA,EAC/CnC,KAAKiB,MAAMa,QAAQI,gBAAgBF,IAAMA,EACzChC,KAAKiB,MAAMa,QAAQI,gBAAgBD,OAASiD,SAAS5C,EAAM6C,UAAU,GACrE,IAAIU,GAAgBX,SAAS7D,EAC7BrB,MAAKiB,MAAMa,QAAQI,gBAAgBb,MAAQrB,KAAKqF,YAAYQ,GAC5D7F,KAAKiB,MAAMa,QAAQI,gBAAgBP,SAAW3B,KAAKsF,YAAYO,GAC/D7F,KAAKiB,MAAMa,QAAQI,gBAAgBhB,QAAUgE,SAAShE,GACtDlB,KAAKiB,MAAMa,QAAQI,gBAAgBf,QAAU+D,SAAS/D,OACnD,IAAIyB,EAAKqC,MAAM,uCAAwC,CAC1DjF,KAAKQ,UAAY,SACjBR,KAAKiB,MAAMmB,OAAOb,OAAS,mBAC3BvB,KAAKiB,MAAMmB,OAAOC,iBAAiBC,MAAQ4C,SAAS5C,GACpDtC,KAAKiB,MAAMmB,OAAOC,iBAAiBL,IAAM+C,CACzC,IAAIe,GAAgBZ,SAAS7D,EAC7BrB,MAAKiB,MAAMmB,OAAOC,iBAAiBhB,MAAQrB,KAAKqF,YAAYS,GAC5D9F,KAAKiB,MAAMmB,OAAOC,iBAAiBV,SAAW3B,KAAKsF,YAAYQ,GAC/D9F,KAAKiB,MAAMmB,OAAOC,iBAAiBnB,QAAUgE,SAAShE,GACtDlB,KAAKiB,MAAMmB,OAAOC,iBAAiBlB,QAAU+D,SAAS/D,OACnD,IAAIyB,EAAKqC,MAAM,mEAAoE,CACtF,GAAIc,GAAOf,EAAUY,OAAO,EAAG,GAC3BI,EAAahB,EAAUY,OAAO,EAClC5F,MAAKQ,UAAY,SACjBR,KAAKiB,MAAMmB,OAAOb,OAAS,oBAC3BvB,KAAKiB,MAAMmB,OAAOG,kBAAkBJ,UAAY6D,EAChDhG,KAAKiB,MAAMmB,OAAOG,kBAAkBP,IAAM+D,EAC1C/F,KAAKiB,MAAMmB,OAAOG,kBAAkBD,MAAQ4C,SAAS5C,EACrD,IAAI2D,GAAgBf,SAAS7D,EAC7BrB,MAAKiB,MAAMmB,OAAOG,kBAAkBlB,MAAQrB,KAAKqF,YAAYY,GAC7DjG,KAAKiB,MAAMmB,OAAOG,kBAAkBZ,SAAW3B,KAAKsF,YAAYW,GAChEjG,KAAKiB,MAAMmB,OAAOG,kBAAkBrB,QAAUgE,SAAShE,GACvDlB,KAAKiB,MAAMmB,OAAOG,kBAAkBpB,QAAU+D,SAAS/D,OAEvDnB,MAAKQ,UAAY,WACjBR,KAAKiB,MAAMuB,SAASC,WAAaG,MAO1ChD,KAGPsG,EAAe,muCAEfC,EAAiB,WACjB,QAASA,KACLlL,EAAe+E,KAAMmG,GA+EzB,MA5EA9K,GAAY8K,IACRlK,IAAK,UACLmB,MAAO,SAAiBkD,EAAYmC,GAChC,GAAI2D,GAAsB3D,EAAW4D,aACrC,QAAQ/F,GACJ,IAAK,SACD,QAAS8F,EAAoBnB,MAAMiB,EACvC,SACI,KAAM,wBAA0B5F,EAAa,yBAIzDrE,IAAK,YACLmB,MAAO,SAAmBkJ,GACtB,GAAIlJ,GAAQ,GAAKkJ,CACjB,IAAIlJ,EAAM1B,OAAS,EAAG,CAClB,GAAI6K,GAAoBnJ,EAAMoJ,OAAOpJ,EAAM1B,OAAS,EACpD,IAA0B,MAAtB6K,EACA,MAAO,KAGf,GAAIE,GAAYrJ,EAAMoJ,OAAOpJ,EAAM1B,OAAS,EAC5C,QAAQ+K,GACJ,IAAK,IACD,MAAO,IACX,KAAK,IACD,MAAO,IACX,KAAK,IACD,MAAO,IACX,SACI,MAAO,SAInBxK,IAAK,YACLmB,MAAO,SAAmBkJ,GACtB,MAAgC,MAAxB,GAAKA,GAAQ5K,OAAe,IAAM4K,EAAS,GAAKA,KAG5DrK,IAAK,QACLmB,MAAO,SAAesJ,EAAOC,GAMzB,GALmB,mBAARA,KACPA,EAAMD,EACNA,EAAQ,GAGRA,EAAQ,GAAKC,EAAM,EAAG,KAAM,sCAEhC,OAAIA,GAAMD,KACIjC,OAAOjH,EAAkB,GAAIF,OAAMqJ,EAAMD,KAASE,IAAI,SAAUC,EAAKC,GAC3E,MAAOA,GAAMJ,IAEVA,EAAQC,KACLlC,OAAOjH,EAAkB,GAAIF,OAAMoJ,EAAQC,KAAOC,IAAI,SAAUC,EAAKC,GAC3E,MAAOH,GAAMG,IAEP,GAAIxJ,UAGtBrB,IAAK,gBACLmB,MAAO,WACH,OACI6E,OAAQjC,KAAK+G,MAAM,EAAG,IACtBC,YAAa,KAAM,KAAM,KAAM,KAAM,KAAM,KAC3CvF,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACjDP,QAASlB,KAAK+G,MAAM,EAAG,IACvBE,YAAajH,KAAK+G,MAAM,IACxB5F,QAASnB,KAAK+G,MAAM,IACpB1F,MAAOrB,KAAK+G,MAAM,EAAG,IACrBG,UAAWlH,KAAK+G,MAAM,EAAG,IACzBI,oBAAqB,MAAM1C,OAAOjH,KAAqBiH,OAAOjH,EAAkB,GAAIF,OAAM,MAAMsJ,IAAI,SAAUC,EAAKC,GAC/G,MAAO,IAAMA,EAAM,OACjB,KAAM,WAIjBX,KAGPiB,EAAoB,QAASA,GAAkBvH,EAAQC,GACvD,UAEA,IAAIC,GAAQC,IAEZ/E,GAAe+E,KAAMoH,GACrBpH,KAAKF,eAAiBA,EAEtBE,KAAKgB,eACDE,QAASpB,EAAeiH,MAAM,IAC9B5F,QAASrB,EAAeiH,MAAM,IAC9BM,WAAY,KAAM,OAGtBxH,EAAO8C,OAAO,sBAAuB,WACjC5C,EAAMiB,cAAcK,MAAQtB,EAAM2B,cAAgB3B,EAAMD,eAAeiH,MAAM,IAAMhH,EAAMD,eAAeiH,MAAM,EAAG,6CAIzH3G,QAAQkH,OAAO,uBAAwBC,QAAQ,iBAAkBpB,GAAgBqB,UAAU,qBACvFC,UACIC,WAAY,IACZC,SAAU,IACVC,WAAY,IACZC,MAAO,IACPC,YAAa,IACbpG,cAAe,IACfyC,YAAa,IACb4D,WAAY,KAEhBC,YAAa,6CACbC,WAAYb,IACbI,UAAU,WACTC,UACIpD,QAAS,IACTb,WAAY,IACZrD,QAAS,IACTG,WAAY,IACZ0H,YAAa,IACbhF,KAAM,KAEVkF,SACIjF,YAAa,UACbkF,eAAgB,cAChBpF,SAAU,UAEdiF,aAAA,SAAa,SAAqBI,GAC9B,UAEA,OAAOA,GAAOJ,aAAe,mCAGjCC,WAAYrI,4ECluBhByI,EAAAC,IAAA,6CAAA,2uDACAD,EAAAC,IAAA,iCAAA","file":"cron-gen.min.js","sourcesContent":["(function () {\n'use strict';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar set = function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n};\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar ACCEPTABLE_CRON_FORMATS = ['quartz'];\nvar DAY_LOOKUPS = {\n 'SUN': 'Sunday',\n 'MON': 'Monday',\n 'TUE': 'Tuesday',\n 'WED': 'Wednesday',\n 'THU': 'Thursday',\n 'FRI': 'Friday',\n 'SAT': 'Saturday'\n};\nvar MONTH_WEEK_LOOKUPS = {\n '#1': 'First',\n '#2': 'Second',\n '#3': 'Third',\n '#4': 'Fourth',\n '#5': 'Fifth',\n 'L': 'Last'\n};\nvar MONTH_LOOKUPS = {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n};\n\nvar States = {\n INIT: 1,\n DIRTY: 2,\n CLEAN: 3\n};\n\nvar CronGenComponent = function () {\n function CronGenComponent($scope, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenComponent);\n this.parsedOptions = this.mergeDefaultOptions(this.options);\n\n angular.extend(this, {\n cronGenService: cronGenService,\n cronFormat: 'quartz',\n currentState: States.INIT,\n activeTab: function () {\n if (!_this.parsedOptions.hideMinutesTab) {\n return 'minutes';\n } else if (!_this.parsedOptions.hideHourlyTab) {\n return 'hourly';\n } else if (!_this.parsedOptions.hideDailyTab) {\n return 'daily';\n } else if (!_this.parsedOptions.hideWeeklyTab) {\n return 'weekly';\n } else if (!_this.parsedOptions.hideMonthlyTab) {\n return 'monthly';\n } else if (!_this.parsedOptions.hideYearlyTab) {\n return 'yearly';\n } else if (!_this.parsedOptions.hideAdvancedTab) {\n return 'advanced';\n }\n throw 'No tabs available to make active';\n }(),\n selectOptions: cronGenService.selectOptions(),\n state: {\n minutes: {\n minutes: 1,\n seconds: 0\n },\n hourly: {\n hours: 1,\n minutes: 0,\n seconds: 0\n },\n daily: {\n subTab: 'everyDays',\n everyDays: {\n days: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n everyWeekDay: {\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n weekly: {\n MON: true,\n TUE: false,\n WED: false,\n THU: false,\n FRI: false,\n SAT: false,\n SUN: false,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n monthly: {\n subTab: 'specificDay',\n specificDay: {\n day: '1',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificWeekDay: {\n monthWeek: '#1',\n day: 'MON',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n yearly: {\n subTab: 'specificMonthDay',\n specificMonthDay: {\n month: 1,\n day: '1',\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificMonthWeek: {\n monthWeek: '#1',\n day: 'MON',\n month: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n advanced: {\n expression: '0 15 10 L-2 * ?'\n }\n }\n });\n\n //Validate our opts\n if (ACCEPTABLE_CRON_FORMATS.indexOf(this.cronFormat) == -1) {\n throw 'Desired cron format (' + this.cronFormat + ') is not available';\n }\n\n //On model changes, update our state to reflect the user's input\n $scope.$watch('$ctrl.ngModel', function (cron) {\n return _this.handleModelChange(cron);\n });\n\n // Watch for option changes\n $scope.$watch('$ctrl.options', function (options) {\n return _this.parsedOptions = _this.mergeDefaultOptions(options);\n }, true);\n }\n\n createClass(CronGenComponent, [{\n key: '$onInit',\n value: function $onInit() {\n var _this2 = this;\n\n //If possible, add our cron expression validator to our form\n if (this.formCtrl && this.name) {\n this.ngModelCtrl.$validators.testCronExpr = function (expression) {\n return _this2.cronGenService.isValid(_this2.cronFormat, expression);\n };\n }\n }\n }, {\n key: 'setActiveTab',\n value: function setActiveTab($event, tab) {\n $event.preventDefault();\n if (!this.ngDisabled) {\n this.activeTab = tab;\n this.regenerateCron();\n }\n }\n }, {\n key: 'dayDisplay',\n value: function dayDisplay(day) {\n return DAY_LOOKUPS[day];\n }\n }, {\n key: 'monthWeekDisplay',\n value: function monthWeekDisplay(monthWeekNumber) {\n return MONTH_WEEK_LOOKUPS[monthWeekNumber];\n }\n }, {\n key: 'monthDisplay',\n value: function monthDisplay(monthNumber) {\n return MONTH_LOOKUPS[monthNumber];\n }\n }, {\n key: 'monthDayDisplay',\n value: function monthDayDisplay(monthDay) {\n if (monthDay === 'L') {\n return 'Last Day';\n } else if (monthDay === 'LW') {\n return 'Last Weekday';\n } else if (monthDay === '1W') {\n return 'First Weekday';\n } else {\n return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' Day';\n }\n }\n }, {\n key: 'processHour',\n value: function processHour(hours) {\n if (this.parsedOptions.use24HourTime) {\n return hours;\n } else {\n return (hours + 11) % 12 + 1;\n }\n }\n }, {\n key: 'getHourType',\n value: function getHourType(hours) {\n return this.parsedOptions.use24HourTime ? null : hours >= 12 ? 'PM' : 'AM';\n }\n }, {\n key: 'hourToCron',\n value: function hourToCron(hour, hourType) {\n if (this.parsedOptions.use24HourTime) {\n return hour;\n } else {\n return hourType === 'AM' ? hour === 12 ? 0 : hour : hour === 12 ? 12 : hour + 12;\n }\n }\n }, {\n key: 'mergeDefaultOptions',\n value: function mergeDefaultOptions(options) {\n return angular.extend({\n formInputClass: 'form-control cron-gen-input',\n formSelectClass: 'form-control cron-gen-select',\n formRadioClass: 'form-control-static cron-gen-radio',\n formCheckboxClass: 'form-control-static cron-gen-checkbox',\n hideMinutesTab: false,\n hideHourlyTab: false,\n hideDailyTab: false,\n hideWeeklyTab: false,\n hideMonthlyTab: false,\n hideYearlyTab: false,\n hideAdvancedTab: true,\n use24HourTime: false,\n hideSeconds: false\n }, options);\n }\n }, {\n key: 'regenerateCron',\n value: function regenerateCron() {\n var _this3 = this;\n\n this.currentState = States.DIRTY;\n switch (this.activeTab) {\n case 'minutes':\n this.ngModel = this.state.minutes.seconds + ' 0/' + this.state.minutes.minutes + ' * 1/1 * ? *';\n break;\n case 'hourly':\n this.ngModel = this.state.hourly.seconds + ' ' + this.state.hourly.minutes + ' 0/' + this.state.hourly.hours + ' 1/1 * ? *';\n break;\n case 'daily':\n switch (this.state.daily.subTab) {\n case 'everyDays':\n this.ngModel = this.state.daily.everyDays.seconds + ' ' + this.state.daily.everyDays.minutes + ' ' + this.hourToCron(this.state.daily.everyDays.hours, this.state.daily.everyDays.hourType) + ' 1/' + this.state.daily.everyDays.days + ' * ? *';\n break;\n case 'everyWeekDay':\n this.ngModel = this.state.daily.everyWeekDay.seconds + ' ' + this.state.daily.everyWeekDay.minutes + ' ' + this.hourToCron(this.state.daily.everyWeekDay.hours, this.state.daily.everyWeekDay.hourType) + ' ? * MON-FRI *';\n break;\n default:\n throw 'Invalid cron daily subtab selection';\n }\n break;\n case 'weekly':\n var days = this.selectOptions.days.reduce(function (acc, day) {\n return _this3.state.weekly[day] ? acc.concat([day]) : acc;\n }, []).join(',');\n this.ngModel = this.state.weekly.seconds + ' ' + this.state.weekly.minutes + ' ' + this.hourToCron(this.state.weekly.hours, this.state.weekly.hourType) + ' ? * ' + days + ' *';\n break;\n case 'monthly':\n switch (this.state.monthly.subTab) {\n case 'specificDay':\n this.ngModel = this.state.monthly.specificDay.seconds + ' ' + this.state.monthly.specificDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificDay.hours, this.state.monthly.specificDay.hourType) + ' ' + this.state.monthly.specificDay.day + ' 1/' + this.state.monthly.specificDay.months + ' ? *';\n break;\n case 'specificWeekDay':\n this.ngModel = this.state.monthly.specificWeekDay.seconds + ' ' + this.state.monthly.specificWeekDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificWeekDay.hours, this.state.monthly.specificWeekDay.hourType) + ' ? 1/' + this.state.monthly.specificWeekDay.months + ' ' + this.state.monthly.specificWeekDay.day + this.state.monthly.specificWeekDay.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron monthly subtab selection';\n }\n break;\n case 'yearly':\n switch (this.state.yearly.subTab) {\n case 'specificMonthDay':\n this.ngModel = this.state.yearly.specificMonthDay.seconds + ' ' + this.state.yearly.specificMonthDay.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthDay.hours, this.state.yearly.specificMonthDay.hourType) + ' ' + this.state.yearly.specificMonthDay.day + ' ' + this.state.yearly.specificMonthDay.month + ' ? *';\n break;\n case 'specificMonthWeek':\n this.ngModel = this.state.yearly.specificMonthWeek.seconds + ' ' + this.state.yearly.specificMonthWeek.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthWeek.hours, this.state.yearly.specificMonthWeek.hourType) + ' ? ' + this.state.yearly.specificMonthWeek.month + ' ' + this.state.yearly.specificMonthWeek.day + this.state.yearly.specificMonthWeek.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron yearly subtab selection';\n }\n break;\n case 'advanced':\n this.ngModel = this.state.advanced.expression;\n break;\n default:\n throw 'Invalid cron active tab selection';\n }\n }\n }, {\n key: 'handleModelChange',\n value: function handleModelChange(cron) {\n var _this4 = this;\n\n if (this.currentState === States.DIRTY) {\n this.currentState = States.CLEAN;\n return;\n } else {\n this.currentState = States.CLEAN;\n }\n\n var segments = cron.split(' ');\n if (segments.length === 6 || segments.length === 7) {\n var _segments = slicedToArray(segments, 6),\n seconds = _segments[0],\n minutes = _segments[1],\n hours = _segments[2],\n dayOfMonth = _segments[3],\n month = _segments[4],\n dayOfWeek = _segments[5];\n\n if (cron.match(/\\d+ 0\\/\\d+ \\* 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'minutes';\n this.state.minutes.minutes = parseInt(minutes.substring(2));\n this.state.minutes.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'hourly';\n this.state.hourly.hours = parseInt(hours.substring(2));\n this.state.hourly.minutes = parseInt(minutes);\n this.state.hourly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ 1\\/\\d+ \\* \\? \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyDays';\n this.state.daily.everyDays.days = parseInt(dayOfMonth.substring(2));\n var parsedHours = parseInt(hours);\n this.state.daily.everyDays.hours = this.processHour(parsedHours);\n this.state.daily.everyDays.hourType = this.getHourType(parsedHours);\n this.state.daily.everyDays.minutes = parseInt(minutes);\n this.state.daily.everyDays.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* MON-FRI \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyWeekDay';\n var _parsedHours = parseInt(hours);\n this.state.daily.everyWeekDay.hours = this.processHour(_parsedHours);\n this.state.daily.everyWeekDay.hourType = this.getHourType(_parsedHours);\n this.state.daily.everyWeekDay.minutes = parseInt(minutes);\n this.state.daily.everyWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/)) {\n this.activeTab = 'weekly';\n this.selectOptions.days.forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = false;\n });\n dayOfWeek.split(',').forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = true;\n });\n var _parsedHours2 = parseInt(hours);\n this.state.weekly.hours = this.processHour(_parsedHours2);\n this.state.weekly.hourType = this.getHourType(_parsedHours2);\n this.state.weekly.minutes = parseInt(minutes);\n this.state.weekly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ \\? \\*/)) {\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificDay';\n this.state.monthly.specificDay.day = dayOfMonth;\n this.state.monthly.specificDay.months = parseInt(month.substring(2));\n var _parsedHours3 = parseInt(hours);\n this.state.monthly.specificDay.hours = this.processHour(_parsedHours3);\n this.state.monthly.specificDay.hourType = this.getHourType(_parsedHours3);\n this.state.monthly.specificDay.minutes = parseInt(minutes);\n this.state.monthly.specificDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var day = dayOfWeek.substr(0, 3);\n var monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificWeekDay';\n this.state.monthly.specificWeekDay.monthWeek = monthWeek;\n this.state.monthly.specificWeekDay.day = day;\n this.state.monthly.specificWeekDay.months = parseInt(month.substring(2));\n var _parsedHours4 = parseInt(hours);\n this.state.monthly.specificWeekDay.hours = this.processHour(_parsedHours4);\n this.state.monthly.specificWeekDay.hourType = this.getHourType(_parsedHours4);\n this.state.monthly.specificWeekDay.minutes = parseInt(minutes);\n this.state.monthly.specificWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ \\? \\*/)) {\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthDay';\n this.state.yearly.specificMonthDay.month = parseInt(month);\n this.state.yearly.specificMonthDay.day = dayOfMonth;\n var _parsedHours5 = parseInt(hours);\n this.state.yearly.specificMonthDay.hours = this.processHour(_parsedHours5);\n this.state.yearly.specificMonthDay.hourType = this.getHourType(_parsedHours5);\n this.state.yearly.specificMonthDay.minutes = parseInt(minutes);\n this.state.yearly.specificMonthDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var _day = dayOfWeek.substr(0, 3);\n var _monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthWeek';\n this.state.yearly.specificMonthWeek.monthWeek = _monthWeek;\n this.state.yearly.specificMonthWeek.day = _day;\n this.state.yearly.specificMonthWeek.month = parseInt(month);\n var _parsedHours6 = parseInt(hours);\n this.state.yearly.specificMonthWeek.hours = this.processHour(_parsedHours6);\n this.state.yearly.specificMonthWeek.hourType = this.getHourType(_parsedHours6);\n this.state.yearly.specificMonthWeek.minutes = parseInt(minutes);\n this.state.yearly.specificMonthWeek.seconds = parseInt(seconds);\n } else {\n this.activeTab = 'advanced';\n this.state.advanced.expression = cron;\n }\n } else {\n throw 'Unsupported cron expression. Expression must be 6 or 7 segments';\n }\n }\n }]);\n return CronGenComponent;\n}();\n\nvar 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}))?)*))$/;\n\nvar CronGenService = function () {\n function CronGenService() {\n classCallCheck(this, CronGenService);\n }\n\n createClass(CronGenService, [{\n key: 'isValid',\n value: function isValid(cronFormat, expression) {\n var formattedExpression = expression.toUpperCase();\n switch (cronFormat) {\n case 'quartz':\n return !!formattedExpression.match(QUARTZ_REGEX);\n default:\n throw 'Desired cron format (' + cronFormat + ') is not available';\n }\n }\n }, {\n key: 'appendInt',\n value: function appendInt(number) {\n var value = '' + number;\n if (value.length > 1) {\n var secondToLastDigit = value.charAt(value.length - 2);\n if (secondToLastDigit === '1') {\n return \"th\";\n }\n }\n var lastDigit = value.charAt(value.length - 1);\n switch (lastDigit) {\n case '1':\n return \"st\";\n case '2':\n return \"nd\";\n case '3':\n return \"rd\";\n default:\n return \"th\";\n }\n }\n }, {\n key: 'padNumber',\n value: function padNumber(number) {\n return ('' + number).length === 1 ? '0' + number : '' + number;\n }\n }, {\n key: 'range',\n value: function range(start, end) {\n if (typeof end === 'undefined') {\n end = start;\n start = 0;\n }\n\n if (start < 0 || end < 0) throw 'Range values must be positive values';\n\n if (end > start) {\n return [].concat(toConsumableArray(new Array(end - start))).map(function (val, idx) {\n return idx + start;\n });\n } else if (start < end) {\n return [].concat(toConsumableArray(new Array(start - end))).map(function (val, idx) {\n return end - idx;\n });\n } else return new Array();\n }\n }, {\n key: 'selectOptions',\n value: function selectOptions() {\n return {\n months: this.range(1, 13),\n monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n days: ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],\n minutes: this.range(1, 60),\n fullMinutes: this.range(60),\n seconds: this.range(60),\n hours: this.range(1, 24),\n monthDays: this.range(1, 32),\n monthDaysWithLasts: ['1W'].concat(toConsumableArray([].concat(toConsumableArray(new Array(31))).map(function (val, idx) {\n return '' + (idx + 1);\n })), ['LW', 'L'])\n };\n }\n }]);\n return CronGenService;\n}();\n\nvar CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenTimeSelect);\n this.cronGenService = cronGenService;\n\n this.selectOptions = {\n minutes: cronGenService.range(60),\n seconds: cronGenService.range(60),\n hourTypes: ['AM', 'PM']\n };\n\n $scope.$watch('$ctrl.use24HourTime', function () {\n _this.selectOptions.hours = _this.use24HourTime ? _this.cronGenService.range(24) : _this.cronGenService.range(1, 13);\n });\n};\n\nangular.module('angular-cron-gen', []).service('cronGenService', CronGenService).component('cronGenTimeSelect', {\n bindings: {\n isDisabled: '<',\n onChange: '&',\n isRequired: '<',\n model: '=',\n selectClass: '<',\n use24HourTime: '<',\n hideSeconds: '<',\n namePrefix: '@'\n },\n templateUrl: 'angular-cron-gen/cron-gen-time-select.html',\n controller: CronGenTimeSelect\n}).component('cronGen', {\n bindings: {\n ngModel: '=',\n ngDisabled: '<',\n options: '<',\n cronFormat: '@',\n templateUrl: '@',\n name: '@'\n },\n require: {\n ngModelCtrl: 'ngModel',\n ngDisabledCtrl: '?ngDisabled',\n formCtrl: '^?form'\n },\n templateUrl: function templateUrl($attrs) {\n 'ngInject';\n\n return $attrs.templateUrl || 'angular-cron-gen/cron-gen.html';\n },\n\n controller: CronGenComponent\n});\n\n}());\n","angular.module('angular-cron-gen').run(['$templateCache', function($templateCache) {$templateCache.put('angular-cron-gen/cron-gen-time-select.html','
\\n \\n \\n \\n \\n
');\n$templateCache.put('angular-cron-gen/cron-gen.html','\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n Every\\n \\n minute(s)\\n on second\\n \\n
\\n
\\n
\\n
\\n Every\\n \\n hour(s) on minute\\n \\n and second\\n \\n
\\n
\\n
\\n
\\n \\n Every\\n \\n day(s) at\\n \\n \\n
\\n
\\n \\n Every week day (Monday through Friday) at\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n Monday\\n
\\n
\\n \\n Tuesday\\n
\\n
\\n \\n Wednesday\\n
\\n
\\n \\n Thursday\\n
\\n
\\n \\n Friday\\n
\\n
\\n \\n Saturday\\n
\\n
\\n \\n Sunday\\n
\\n
\\n Start time\\n \\n \\n
\\n
\\n
\\n \\n On the\\n \\n of every\\n \\n month(s) at\\n \\n \\n
\\n
\\n \\n On the\\n \\n \\n of every\\n \\n month(s) at\\n \\n \\n
\\n\\n
\\n
\\n
\\n \\n Every\\n \\n on the\\n \\n at\\n \\n \\n
\\n
\\n \\n On the\\n \\n \\n of\\n \\n at\\n \\n \\n
\\n
\\n
\\n Cron Expression\\n \\n\\n

More details about how to create these expressions can be found here.

\\n
\\n
\\n
\\n
\\n
\\n
\\n');}]);"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cron-gen.module.js","templates.js"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","err","Array","isArray","toConsumableArray","arr2","from","ACCEPTABLE_CRON_FORMATS","DAY_LOOKUPS","en","SUN","MON","TUE","WED","THU","FRI","SAT","it","MONTH_WEEK_LOOKUPS","#1","#2","#3","#4","#5","L","MONTH_LOOKUPS","1","2","3","4","5","6","7","8","9","10","11","12","States","INIT","DIRTY","CLEAN","CronGenComponent","$scope","$translate","cronGenService","_this","this","parsedOptions","mergeDefaultOptions","options","use","language","angular","extend","cronFormat","currentState","activeTab","hideMinutesTab","hideHourlyTab","hideDailyTab","hideWeeklyTab","hideMonthlyTab","hideYearlyTab","hideAdvancedTab","selectOptions","state","minutes","seconds","hourly","hours","daily","subTab","everyDays","days","use24HourTime","hourType","everyWeekDay","weekly","monthly","specificDay","day","months","specificWeekDay","monthWeek","yearly","specificMonthDay","month","specificMonthWeek","advanced","expression","indexOf","$watch","cron","handleModelChange","_this2","formCtrl","name","ngModelCtrl","$validators","testCronExpr","isValid","$event","tab","preventDefault","ngDisabled","regenerateCron","monthWeekNumber","monthNumber","monthDay","appendInt","hour","formInputClass","formSelectClass","formRadioClass","formCheckboxClass","hideSeconds","_this3","ngModel","hourToCron","reduce","acc","concat","join","_this4","segments","split","_segments","dayOfMonth","dayOfWeek","match","parseInt","substring","parsedHours","processHour","getHourType","_parsedHours","forEach","weekDay","_parsedHours2","_parsedHours3","substr","_parsedHours4","_parsedHours5","_day","_monthWeek","_parsedHours6","QUARTZ_REGEX","CronGenService","formattedExpression","toUpperCase","number","charAt","start","end","map","val","idx","range","monthWeeks","fullMinutes","monthDays","monthDaysWithLasts","CronGenTimeSelect","hourTypes","module","config","$translateProvider","translations","MINUTES","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY","ADVANCED","EVERY","MINUTE","ON_SECOND","HOUR_ON_MINUTE","AND_SECOND","DAY_AT","EVERY_WEEK_WORKING_DAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY","START_TIME","ON_THE","OF_EVERY","MONTHS_AT","AT","OF","CRON_EXPRESSION","MORE_DETAILS","HERE","service","component","bindings","isDisabled","onChange","isRequired","model","selectClass","namePrefix","templateUrl","controller","require","ngDisabledCtrl","$attrs","$templateCache","put"],"mappings":"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","file":"cron-gen.min.js","sourcesContent":["(function () {\n'use strict';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar ACCEPTABLE_CRON_FORMATS = ['quartz'];\nvar DAY_LOOKUPS = {\n 'en': {\n 'SUN': 'Sunday',\n 'MON': 'Monday',\n 'TUE': 'Tuesday',\n 'WED': 'Wednesday',\n 'THU': 'Thursday',\n 'FRI': 'Friday',\n 'SAT': 'Saturday'\n },\n 'it': {\n 'SUN': 'Domenica',\n 'MON': \"Lunedi'\",\n 'TUE': \"Martedi'\",\n 'WED': \"Mercoledi'\",\n 'THU': \"Giovedi'\",\n 'FRI': \"Venerdi'\",\n 'SAT': 'Sabato'\n }\n};\nvar MONTH_WEEK_LOOKUPS = {\n 'en': {\n '#1': 'First',\n '#2': 'Second',\n '#3': 'Third',\n '#4': 'Fourth',\n '#5': 'Fifth',\n 'L': 'Last'\n },\n 'it': {\n '#1': 'Primo',\n '#2': 'Secondo',\n '#3': 'Terzo',\n '#4': 'Quarto',\n '#5': 'Quinto',\n 'L': 'Ultimo'\n }\n};\nvar MONTH_LOOKUPS = {\n 'en': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n },\n 'it': {\n '1': 'Gennaio',\n '2': 'Febbraio',\n '3': 'Marzo',\n '4': 'Aprile',\n '5': 'Maggio',\n '6': 'Giugno',\n '7': 'Luglio',\n '8': 'Agosto',\n '9': 'Settembre',\n '10': 'Ottobre',\n '11': 'Novembre',\n '12': 'Dicembre'\n }\n};\n\nvar States = {\n INIT: 1,\n DIRTY: 2,\n CLEAN: 3\n};\n\nvar CronGenComponent = function () {\n function CronGenComponent($scope, $translate, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenComponent);\n this.parsedOptions = this.mergeDefaultOptions(this.options);\n\n $translate.use(this.parsedOptions.language);\n\n angular.extend(this, {\n cronGenService: cronGenService,\n cronFormat: 'quartz',\n currentState: States.INIT,\n activeTab: function () {\n if (!_this.parsedOptions.hideMinutesTab) {\n return 'minutes';\n } else if (!_this.parsedOptions.hideHourlyTab) {\n return 'hourly';\n } else if (!_this.parsedOptions.hideDailyTab) {\n return 'daily';\n } else if (!_this.parsedOptions.hideWeeklyTab) {\n return 'weekly';\n } else if (!_this.parsedOptions.hideMonthlyTab) {\n return 'monthly';\n } else if (!_this.parsedOptions.hideYearlyTab) {\n return 'yearly';\n } else if (!_this.parsedOptions.hideAdvancedTab) {\n return 'advanced';\n }\n throw 'No tabs available to make active';\n }(),\n selectOptions: cronGenService.selectOptions(),\n state: {\n minutes: {\n minutes: 1,\n seconds: 0\n },\n hourly: {\n hours: 1,\n minutes: 0,\n seconds: 0\n },\n daily: {\n subTab: 'everyDays',\n everyDays: {\n days: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n everyWeekDay: {\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n weekly: {\n MON: true,\n TUE: false,\n WED: false,\n THU: false,\n FRI: false,\n SAT: false,\n SUN: false,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n monthly: {\n subTab: 'specificDay',\n specificDay: {\n day: '1',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificWeekDay: {\n monthWeek: '#1',\n day: 'MON',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n yearly: {\n subTab: 'specificMonthDay',\n specificMonthDay: {\n month: 1,\n day: '1',\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificMonthWeek: {\n monthWeek: '#1',\n day: 'MON',\n month: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n advanced: {\n expression: '0 15 10 L-2 * ?'\n }\n }\n });\n\n //Validate our opts\n if (ACCEPTABLE_CRON_FORMATS.indexOf(this.cronFormat) == -1) {\n throw 'Desired cron format (' + this.cronFormat + ') is not available';\n }\n\n //On model changes, update our state to reflect the user's input\n $scope.$watch('$ctrl.ngModel', function (cron) {\n return _this.handleModelChange(cron);\n });\n\n // Watch for option changes\n $scope.$watch('$ctrl.options', function (options) {\n return _this.parsedOptions = _this.mergeDefaultOptions(options);\n }, true);\n }\n\n createClass(CronGenComponent, [{\n key: '$onInit',\n value: function $onInit() {\n var _this2 = this;\n\n //If possible, add our cron expression validator to our form\n if (this.formCtrl && this.name) {\n this.ngModelCtrl.$validators.testCronExpr = function (expression) {\n return _this2.cronGenService.isValid(_this2.cronFormat, expression);\n };\n }\n }\n }, {\n key: 'setActiveTab',\n value: function setActiveTab($event, tab) {\n $event.preventDefault();\n if (!this.ngDisabled) {\n this.activeTab = tab;\n this.regenerateCron();\n }\n }\n }, {\n key: 'dayDisplay',\n value: function dayDisplay(day) {\n return DAY_LOOKUPS[this.parsedOptions.language][day];\n }\n }, {\n key: 'monthWeekDisplay',\n value: function monthWeekDisplay(monthWeekNumber) {\n return MONTH_WEEK_LOOKUPS[this.parsedOptions.language][monthWeekNumber];\n }\n }, {\n key: 'monthDisplay',\n value: function monthDisplay(monthNumber) {\n return MONTH_LOOKUPS[this.parsedOptions.language][monthNumber];\n }\n }, {\n key: 'monthDayDisplay',\n value: function monthDayDisplay(monthDay) {\n if (monthDay === 'L') {\n return 'Last Day';\n } else if (monthDay === 'LW') {\n return 'Last Weekday';\n } else if (monthDay === '1W') {\n return 'First Weekday';\n } else {\n return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' Day';\n }\n }\n }, {\n key: 'processHour',\n value: function processHour(hours) {\n if (this.parsedOptions.use24HourTime) {\n return hours;\n } else {\n return (hours + 11) % 12 + 1;\n }\n }\n }, {\n key: 'getHourType',\n value: function getHourType(hours) {\n return this.parsedOptions.use24HourTime ? null : hours >= 12 ? 'PM' : 'AM';\n }\n }, {\n key: 'hourToCron',\n value: function hourToCron(hour, hourType) {\n if (this.parsedOptions.use24HourTime) {\n return hour;\n } else {\n return hourType === 'AM' ? hour === 12 ? 0 : hour : hour === 12 ? 12 : hour + 12;\n }\n }\n }, {\n key: 'mergeDefaultOptions',\n value: function mergeDefaultOptions(options) {\n return angular.extend({\n formInputClass: 'form-control cron-gen-input',\n formSelectClass: 'form-control cron-gen-select',\n formRadioClass: 'form-control-static cron-gen-radio',\n formCheckboxClass: 'form-control-static cron-gen-checkbox',\n hideMinutesTab: false,\n hideHourlyTab: false,\n hideDailyTab: false,\n hideWeeklyTab: false,\n hideMonthlyTab: false,\n hideYearlyTab: false,\n hideAdvancedTab: true,\n use24HourTime: false,\n hideSeconds: false,\n language: 'en'\n }, options);\n }\n }, {\n key: 'regenerateCron',\n value: function regenerateCron() {\n var _this3 = this;\n\n this.currentState = States.DIRTY;\n switch (this.activeTab) {\n case 'minutes':\n this.ngModel = this.state.minutes.seconds + ' 0/' + this.state.minutes.minutes + ' * 1/1 * ? *';\n break;\n case 'hourly':\n this.ngModel = this.state.hourly.seconds + ' ' + this.state.hourly.minutes + ' 0/' + this.state.hourly.hours + ' 1/1 * ? *';\n break;\n case 'daily':\n switch (this.state.daily.subTab) {\n case 'everyDays':\n this.ngModel = this.state.daily.everyDays.seconds + ' ' + this.state.daily.everyDays.minutes + ' ' + this.hourToCron(this.state.daily.everyDays.hours, this.state.daily.everyDays.hourType) + ' 1/' + this.state.daily.everyDays.days + ' * ? *';\n break;\n case 'everyWeekDay':\n this.ngModel = this.state.daily.everyWeekDay.seconds + ' ' + this.state.daily.everyWeekDay.minutes + ' ' + this.hourToCron(this.state.daily.everyWeekDay.hours, this.state.daily.everyWeekDay.hourType) + ' ? * MON-FRI *';\n break;\n default:\n throw 'Invalid cron daily subtab selection';\n }\n break;\n case 'weekly':\n var days = this.selectOptions.days.reduce(function (acc, day) {\n return _this3.state.weekly[day] ? acc.concat([day]) : acc;\n }, []).join(',');\n this.ngModel = this.state.weekly.seconds + ' ' + this.state.weekly.minutes + ' ' + this.hourToCron(this.state.weekly.hours, this.state.weekly.hourType) + ' ? * ' + days + ' *';\n break;\n case 'monthly':\n switch (this.state.monthly.subTab) {\n case 'specificDay':\n this.ngModel = this.state.monthly.specificDay.seconds + ' ' + this.state.monthly.specificDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificDay.hours, this.state.monthly.specificDay.hourType) + ' ' + this.state.monthly.specificDay.day + ' 1/' + this.state.monthly.specificDay.months + ' ? *';\n break;\n case 'specificWeekDay':\n this.ngModel = this.state.monthly.specificWeekDay.seconds + ' ' + this.state.monthly.specificWeekDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificWeekDay.hours, this.state.monthly.specificWeekDay.hourType) + ' ? 1/' + this.state.monthly.specificWeekDay.months + ' ' + this.state.monthly.specificWeekDay.day + this.state.monthly.specificWeekDay.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron monthly subtab selection';\n }\n break;\n case 'yearly':\n switch (this.state.yearly.subTab) {\n case 'specificMonthDay':\n this.ngModel = this.state.yearly.specificMonthDay.seconds + ' ' + this.state.yearly.specificMonthDay.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthDay.hours, this.state.yearly.specificMonthDay.hourType) + ' ' + this.state.yearly.specificMonthDay.day + ' ' + this.state.yearly.specificMonthDay.month + ' ? *';\n break;\n case 'specificMonthWeek':\n this.ngModel = this.state.yearly.specificMonthWeek.seconds + ' ' + this.state.yearly.specificMonthWeek.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthWeek.hours, this.state.yearly.specificMonthWeek.hourType) + ' ? ' + this.state.yearly.specificMonthWeek.month + ' ' + this.state.yearly.specificMonthWeek.day + this.state.yearly.specificMonthWeek.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron yearly subtab selection';\n }\n break;\n case 'advanced':\n this.ngModel = this.state.advanced.expression;\n break;\n default:\n throw 'Invalid cron active tab selection';\n }\n }\n }, {\n key: 'handleModelChange',\n value: function handleModelChange(cron) {\n var _this4 = this;\n\n if (this.currentState === States.DIRTY) {\n this.currentState = States.CLEAN;\n return;\n } else {\n this.currentState = States.CLEAN;\n }\n\n var segments = cron.split(' ');\n if (segments.length === 6 || segments.length === 7) {\n var _segments = slicedToArray(segments, 6),\n seconds = _segments[0],\n minutes = _segments[1],\n hours = _segments[2],\n dayOfMonth = _segments[3],\n month = _segments[4],\n dayOfWeek = _segments[5];\n\n if (cron.match(/\\d+ 0\\/\\d+ \\* 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'minutes';\n this.state.minutes.minutes = parseInt(minutes.substring(2));\n this.state.minutes.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'hourly';\n this.state.hourly.hours = parseInt(hours.substring(2));\n this.state.hourly.minutes = parseInt(minutes);\n this.state.hourly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ 1\\/\\d+ \\* \\? \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyDays';\n this.state.daily.everyDays.days = parseInt(dayOfMonth.substring(2));\n var parsedHours = parseInt(hours);\n this.state.daily.everyDays.hours = this.processHour(parsedHours);\n this.state.daily.everyDays.hourType = this.getHourType(parsedHours);\n this.state.daily.everyDays.minutes = parseInt(minutes);\n this.state.daily.everyDays.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* MON-FRI \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyWeekDay';\n var _parsedHours = parseInt(hours);\n this.state.daily.everyWeekDay.hours = this.processHour(_parsedHours);\n this.state.daily.everyWeekDay.hourType = this.getHourType(_parsedHours);\n this.state.daily.everyWeekDay.minutes = parseInt(minutes);\n this.state.daily.everyWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/)) {\n this.activeTab = 'weekly';\n this.selectOptions.days.forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = false;\n });\n dayOfWeek.split(',').forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = true;\n });\n var _parsedHours2 = parseInt(hours);\n this.state.weekly.hours = this.processHour(_parsedHours2);\n this.state.weekly.hourType = this.getHourType(_parsedHours2);\n this.state.weekly.minutes = parseInt(minutes);\n this.state.weekly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ \\? \\*/)) {\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificDay';\n this.state.monthly.specificDay.day = dayOfMonth;\n this.state.monthly.specificDay.months = parseInt(month.substring(2));\n var _parsedHours3 = parseInt(hours);\n this.state.monthly.specificDay.hours = this.processHour(_parsedHours3);\n this.state.monthly.specificDay.hourType = this.getHourType(_parsedHours3);\n this.state.monthly.specificDay.minutes = parseInt(minutes);\n this.state.monthly.specificDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var day = dayOfWeek.substr(0, 3);\n var monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificWeekDay';\n this.state.monthly.specificWeekDay.monthWeek = monthWeek;\n this.state.monthly.specificWeekDay.day = day;\n this.state.monthly.specificWeekDay.months = parseInt(month.substring(2));\n var _parsedHours4 = parseInt(hours);\n this.state.monthly.specificWeekDay.hours = this.processHour(_parsedHours4);\n this.state.monthly.specificWeekDay.hourType = this.getHourType(_parsedHours4);\n this.state.monthly.specificWeekDay.minutes = parseInt(minutes);\n this.state.monthly.specificWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ \\? \\*/)) {\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthDay';\n this.state.yearly.specificMonthDay.month = parseInt(month);\n this.state.yearly.specificMonthDay.day = dayOfMonth;\n var _parsedHours5 = parseInt(hours);\n this.state.yearly.specificMonthDay.hours = this.processHour(_parsedHours5);\n this.state.yearly.specificMonthDay.hourType = this.getHourType(_parsedHours5);\n this.state.yearly.specificMonthDay.minutes = parseInt(minutes);\n this.state.yearly.specificMonthDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var _day = dayOfWeek.substr(0, 3);\n var _monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthWeek';\n this.state.yearly.specificMonthWeek.monthWeek = _monthWeek;\n this.state.yearly.specificMonthWeek.day = _day;\n this.state.yearly.specificMonthWeek.month = parseInt(month);\n var _parsedHours6 = parseInt(hours);\n this.state.yearly.specificMonthWeek.hours = this.processHour(_parsedHours6);\n this.state.yearly.specificMonthWeek.hourType = this.getHourType(_parsedHours6);\n this.state.yearly.specificMonthWeek.minutes = parseInt(minutes);\n this.state.yearly.specificMonthWeek.seconds = parseInt(seconds);\n } else {\n this.activeTab = 'advanced';\n this.state.advanced.expression = cron;\n }\n } else {\n throw 'Unsupported cron expression. Expression must be 6 or 7 segments';\n }\n }\n }]);\n return CronGenComponent;\n}();\n\nvar 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}))?)*))$/;\n\nvar CronGenService = function () {\n function CronGenService() {\n classCallCheck(this, CronGenService);\n }\n\n createClass(CronGenService, [{\n key: 'isValid',\n value: function isValid(cronFormat, expression) {\n var formattedExpression = expression.toUpperCase();\n switch (cronFormat) {\n case 'quartz':\n return !!formattedExpression.match(QUARTZ_REGEX);\n default:\n throw 'Desired cron format (' + cronFormat + ') is not available';\n }\n }\n }, {\n key: 'appendInt',\n value: function appendInt(number) {\n var value = '' + number;\n if (value.length > 1) {\n var secondToLastDigit = value.charAt(value.length - 2);\n if (secondToLastDigit === '1') {\n return \"th\";\n }\n }\n var lastDigit = value.charAt(value.length - 1);\n switch (lastDigit) {\n case '1':\n return \"st\";\n case '2':\n return \"nd\";\n case '3':\n return \"rd\";\n default:\n return \"th\";\n }\n }\n }, {\n key: 'padNumber',\n value: function padNumber(number) {\n return ('' + number).length === 1 ? '0' + number : '' + number;\n }\n }, {\n key: 'range',\n value: function range(start, end) {\n if (typeof end === 'undefined') {\n end = start;\n start = 0;\n }\n\n if (start < 0 || end < 0) throw 'Range values must be positive values';\n\n if (end > start) {\n return [].concat(toConsumableArray(new Array(end - start))).map(function (val, idx) {\n return idx + start;\n });\n } else if (start < end) {\n return [].concat(toConsumableArray(new Array(start - end))).map(function (val, idx) {\n return end - idx;\n });\n } else return new Array();\n }\n }, {\n key: 'selectOptions',\n value: function selectOptions() {\n return {\n months: this.range(1, 13),\n monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n days: ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],\n minutes: this.range(1, 60),\n fullMinutes: this.range(60),\n seconds: this.range(60),\n hours: this.range(1, 24),\n monthDays: this.range(1, 32),\n monthDaysWithLasts: ['1W'].concat(toConsumableArray([].concat(toConsumableArray(new Array(31))).map(function (val, idx) {\n return '' + (idx + 1);\n })), ['LW', 'L'])\n };\n }\n }]);\n return CronGenService;\n}();\n\nvar CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenTimeSelect);\n this.cronGenService = cronGenService;\n\n this.selectOptions = {\n minutes: cronGenService.range(60),\n seconds: cronGenService.range(60),\n hourTypes: ['AM', 'PM']\n };\n\n $scope.$watch('$ctrl.use24HourTime', function () {\n _this.selectOptions.hours = _this.use24HourTime ? _this.cronGenService.range(24) : _this.cronGenService.range(1, 13);\n });\n};\n\nangular.module('angular-cron-gen', ['pascalprecht.translate']).config(function ($translateProvider) {\n $translateProvider.translations('en', {\n 'MINUTES': 'Minutes',\n 'HOURLY': 'Hourly',\n 'DAILY': 'Daily',\n 'WEEKLY': 'Weekly',\n 'MONTHLY': 'Monthly',\n 'YEARLY': 'Yearly',\n 'ADVANCED': 'Advanced',\n 'EVERY': 'Every',\n 'MINUTE': 'minute(s)',\n 'ON_SECOND': 'on second',\n 'HOUR_ON_MINUTE': 'hour(s) on minute',\n 'AND_SECOND': 'and second',\n 'DAY_AT': 'day(s) at',\n 'EVERY_WEEK_WORKING_DAY': 'Every week day (Monday through Friday) at',\n 'MONDAY': 'Monday',\n 'TUESDAY': 'Tuesday',\n 'WEDNESDAY': 'Wednesday',\n 'THURSDAY': 'Thursday',\n 'FRIDAY': 'Friday',\n 'SATURDAY': 'Saturday',\n 'SUNDAY': 'Sunday',\n 'START_TIME': 'Start time',\n 'ON_THE': 'On the',\n 'OF_EVERY': 'of every',\n 'MONTHS_AT': 'month(s) at',\n 'AT': 'at',\n 'OF': 'of',\n 'CRON_EXPRESSION': 'Cron Expression',\n 'MORE_DETAILS': 'More details about how to create these expressions can be found',\n 'HERE': 'here'\n }).translations('it', {\n 'MINUTES': 'Minuti',\n 'HOURLY': 'Orario',\n 'DAILY': 'Giornaliero',\n 'WEEKLY': 'Settimanale',\n 'MONTHLY': 'Mensile',\n 'YEARLY': 'Annuale',\n 'ADVANCED': 'Avanzato',\n 'EVERY': 'Ogni',\n 'MINUTE': 'minuto/i',\n 'ON_SECOND': 'al secondo',\n 'HOUR_ON_MINUTE': 'ora/e al minuto',\n 'AND_SECOND': 'e secondi',\n 'DAY_AT': 'giorno/i alle',\n 'EVERY_WEEK_WORKING_DAY': \"Ogni giorno della settimana (dal Lunedi' al Venerdi') alle\",\n 'MONDAY': \"Lunedi'\",\n 'TUESDAY': \"Martedi'\",\n 'WEDNESDAY': \"Mercoledi'\",\n 'THURSDAY': \"Giovedi'\",\n 'FRIDAY': \"Venerdi'\",\n 'SATURDAY': 'Sabato',\n 'SUNDAY': 'Domenica',\n 'START_TIME': 'Inizio alle',\n 'ON_THE': 'Il',\n 'OF_EVERY': 'di ogni',\n 'MONTHS_AT': 'mese/i il',\n 'AT': 'il',\n 'OF': 'di',\n 'CRON_EXPRESSION': 'Sintassi Cron',\n 'MORE_DETAILS': 'Maggiori informazioni sulla sintassi Cron li potete trovare',\n 'HERE': 'qui'\n });\n}).service('cronGenService', CronGenService).component('cronGenTimeSelect', {\n bindings: {\n isDisabled: '<',\n onChange: '&',\n isRequired: '<',\n model: '=',\n selectClass: '<',\n use24HourTime: '<',\n hideSeconds: '<',\n namePrefix: '@'\n },\n templateUrl: 'angular-cron-gen/cron-gen-time-select.html',\n controller: CronGenTimeSelect\n}).component('cronGen', {\n bindings: {\n ngModel: '=',\n ngDisabled: '<',\n options: '<',\n cronFormat: '@',\n templateUrl: '@',\n name: '@'\n },\n require: {\n ngModelCtrl: 'ngModel',\n ngDisabledCtrl: '?ngDisabled',\n formCtrl: '^?form'\n },\n templateUrl: function templateUrl($attrs) {\n 'ngInject';\n\n return $attrs.templateUrl || 'angular-cron-gen/cron-gen.html';\n },\n\n controller: CronGenComponent\n});\n\n}());\n","angular.module('angular-cron-gen').run(['$templateCache', function($templateCache) {$templateCache.put('angular-cron-gen/cron-gen-time-select.html','
\\n \\n \\n \\n \\n
');\n$templateCache.put('angular-cron-gen/cron-gen.html','\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'MINUTE\\' | translate}}\\n {{ \\'ON_SECOND\\' | translate }} \\n \\n
\\n
\\n
\\n
\\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'HOUR_ON_MINUTE\\' | translate}}\\n \\n {{ \\'AND_SECOND\\' | translate}}\\n \\n
\\n
\\n
\\n
\\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'DAY_AT\\' | translate}}\\n \\n \\n
\\n
\\n \\n {{ \\'EVERY_WEEK_WORKING_DAY\\' | translate}}\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n {{ \\'MONDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'TUESDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'WEDNESDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'THURSDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'FRIDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'SATURDAY\\' | translate}}\\n
\\n
\\n \\n {{ \\'SUNDAY\\' | translate}}\\n
\\n
\\n {{ \\'START_TIME\\' | translate}}\\n \\n \\n
\\n
\\n
\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
\\n
\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
\\n\\n
\\n
\\n
\\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
\\n
\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
\\n
\\n
\\n {{ \\'CRON_EXPRESSION\\' | translate}}\\n \\n\\n

{{ \\'MORE_DETAILS\\' | translate}} {{ \\'HERE\\' | translate}}.

\\n
\\n
\\n
\\n
\\n
\\n
\\n');}]);"]} \ No newline at end of file diff --git a/build/cron-gen.module.js b/build/cron-gen.module.js index ab709c97..ed978653 100644 --- a/build/cron-gen.module.js +++ b/build/cron-gen.module.js @@ -31,30 +31,9 @@ var createClass = function () { -var get = function get(object, property, receiver) { - if (object === null) object = Function.prototype; - var desc = Object.getOwnPropertyDescriptor(object, property); - if (desc === undefined) { - var parent = Object.getPrototypeOf(object); - if (parent === null) { - return undefined; - } else { - return get(parent, property, receiver); - } - } else if ("value" in desc) { - return desc.value; - } else { - var getter = desc.get; - if (getter === undefined) { - return undefined; - } - - return getter.call(receiver); - } -}; @@ -72,28 +51,6 @@ var get = function get(object, property, receiver) { -var set = function set(object, property, value, receiver) { - var desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - var parent = Object.getPrototypeOf(object); - - if (parent !== null) { - set(parent, property, value, receiver); - } - } else if ("value" in desc && desc.writable) { - desc.value = value; - } else { - var setter = desc.set; - - if (setter !== undefined) { - setter.call(receiver, value); - } - } - - return value; -}; - var slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; @@ -156,35 +113,72 @@ var toConsumableArray = function (arr) { var ACCEPTABLE_CRON_FORMATS = ['quartz']; var DAY_LOOKUPS = { - 'SUN': 'Sunday', - 'MON': 'Monday', - 'TUE': 'Tuesday', - 'WED': 'Wednesday', - 'THU': 'Thursday', - 'FRI': 'Friday', - 'SAT': 'Saturday' + 'en': { + 'SUN': 'Sunday', + 'MON': 'Monday', + 'TUE': 'Tuesday', + 'WED': 'Wednesday', + 'THU': 'Thursday', + 'FRI': 'Friday', + 'SAT': 'Saturday' + }, + 'it': { + 'SUN': 'Domenica', + 'MON': "Lunedi'", + 'TUE': "Martedi'", + 'WED': "Mercoledi'", + 'THU': "Giovedi'", + 'FRI': "Venerdi'", + 'SAT': 'Sabato' + } }; var MONTH_WEEK_LOOKUPS = { - '#1': 'First', - '#2': 'Second', - '#3': 'Third', - '#4': 'Fourth', - '#5': 'Fifth', - 'L': 'Last' + 'en': { + '#1': 'First', + '#2': 'Second', + '#3': 'Third', + '#4': 'Fourth', + '#5': 'Fifth', + 'L': 'Last' + }, + 'it': { + '#1': 'Primo', + '#2': 'Secondo', + '#3': 'Terzo', + '#4': 'Quarto', + '#5': 'Quinto', + 'L': 'Ultimo' + } }; 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' + 'en': { + '1': 'January', + '2': 'February', + '3': 'March', + '4': 'April', + '5': 'May', + '6': 'June', + '7': 'July', + '8': 'August', + '9': 'September', + '10': 'October', + '11': 'November', + '12': 'December' + }, + 'it': { + '1': 'Gennaio', + '2': 'Febbraio', + '3': 'Marzo', + '4': 'Aprile', + '5': 'Maggio', + '6': 'Giugno', + '7': 'Luglio', + '8': 'Agosto', + '9': 'Settembre', + '10': 'Ottobre', + '11': 'Novembre', + '12': 'Dicembre' + } }; var States = { @@ -194,8 +188,8 @@ var States = { }; var CronGenComponent = function () { - CronGenComponent.$inject = ["$scope", "cronGenService"]; - function CronGenComponent($scope, cronGenService) { + CronGenComponent.$inject = ["$scope", "$translate", "cronGenService"]; + function CronGenComponent($scope, $translate, cronGenService) { 'ngInject'; var _this = this; @@ -203,6 +197,8 @@ var CronGenComponent = function () { classCallCheck(this, CronGenComponent); this.parsedOptions = this.mergeDefaultOptions(this.options); + $translate.use(this.parsedOptions.language); + angular.extend(this, { cronGenService: cronGenService, cronFormat: 'quartz', @@ -351,17 +347,17 @@ var CronGenComponent = function () { }, { key: 'dayDisplay', value: function dayDisplay(day) { - return DAY_LOOKUPS[day]; + return DAY_LOOKUPS[this.parsedOptions.language][day]; } }, { key: 'monthWeekDisplay', value: function monthWeekDisplay(monthWeekNumber) { - return MONTH_WEEK_LOOKUPS[monthWeekNumber]; + return MONTH_WEEK_LOOKUPS[this.parsedOptions.language][monthWeekNumber]; } }, { key: 'monthDisplay', value: function monthDisplay(monthNumber) { - return MONTH_LOOKUPS[monthNumber]; + return MONTH_LOOKUPS[this.parsedOptions.language][monthNumber]; } }, { key: 'monthDayDisplay', @@ -415,7 +411,8 @@ var CronGenComponent = function () { hideYearlyTab: false, hideAdvancedTab: true, use24HourTime: false, - hideSeconds: false + hideSeconds: false, + language: 'en' }, options); } }, { @@ -705,7 +702,71 @@ var CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) { }; CronGenTimeSelect.$inject = ["$scope", "cronGenService"]; -angular.module('angular-cron-gen', []).service('cronGenService', CronGenService).component('cronGenTimeSelect', { +angular.module('angular-cron-gen', ['pascalprecht.translate']).config(["$translateProvider", function ($translateProvider) { + $translateProvider.translations('en', { + 'MINUTES': 'Minutes', + 'HOURLY': 'Hourly', + 'DAILY': 'Daily', + 'WEEKLY': 'Weekly', + 'MONTHLY': 'Monthly', + 'YEARLY': 'Yearly', + 'ADVANCED': 'Advanced', + 'EVERY': 'Every', + 'MINUTE': 'minute(s)', + 'ON_SECOND': 'on second', + 'HOUR_ON_MINUTE': 'hour(s) on minute', + 'AND_SECOND': 'and second', + 'DAY_AT': 'day(s) at', + 'EVERY_WEEK_WORKING_DAY': 'Every week day (Monday through Friday) at', + 'MONDAY': 'Monday', + 'TUESDAY': 'Tuesday', + 'WEDNESDAY': 'Wednesday', + 'THURSDAY': 'Thursday', + 'FRIDAY': 'Friday', + 'SATURDAY': 'Saturday', + 'SUNDAY': 'Sunday', + 'START_TIME': 'Start time', + 'ON_THE': 'On the', + 'OF_EVERY': 'of every', + 'MONTHS_AT': 'month(s) at', + 'AT': 'at', + 'OF': 'of', + 'CRON_EXPRESSION': 'Cron Expression', + 'MORE_DETAILS': 'More details about how to create these expressions can be found', + 'HERE': 'here' + }).translations('it', { + 'MINUTES': 'Minuti', + 'HOURLY': 'Orario', + 'DAILY': 'Giornaliero', + 'WEEKLY': 'Settimanale', + 'MONTHLY': 'Mensile', + 'YEARLY': 'Annuale', + 'ADVANCED': 'Avanzato', + 'EVERY': 'Ogni', + 'MINUTE': 'minuto/i', + 'ON_SECOND': 'al secondo', + 'HOUR_ON_MINUTE': 'ora/e al minuto', + 'AND_SECOND': 'e secondi', + 'DAY_AT': 'giorno/i alle', + 'EVERY_WEEK_WORKING_DAY': "Ogni giorno della settimana (dal Lunedi' al Venerdi') alle", + 'MONDAY': "Lunedi'", + 'TUESDAY': "Martedi'", + 'WEDNESDAY': "Mercoledi'", + 'THURSDAY': "Giovedi'", + 'FRIDAY': "Venerdi'", + 'SATURDAY': 'Sabato', + 'SUNDAY': 'Domenica', + 'START_TIME': 'Inizio alle', + 'ON_THE': 'Il', + 'OF_EVERY': 'di ogni', + 'MONTHS_AT': 'mese/i il', + 'AT': 'il', + 'OF': 'di', + 'CRON_EXPRESSION': 'Sintassi Cron', + 'MORE_DETAILS': 'Maggiori informazioni sulla sintassi Cron li potete trovare', + 'HERE': 'qui' + }); +}]).service('cronGenService', CronGenService).component('cronGenTimeSelect', { bindings: { isDisabled: '<', onChange: '&', diff --git a/build/templates.js b/build/templates.js index 6bdf2bca..e849cbd8 100644 --- a/build/templates.js +++ b/build/templates.js @@ -1,2 +1,2 @@ angular.module('angular-cron-gen').run(['$templateCache', function($templateCache) {$templateCache.put('angular-cron-gen/cron-gen-time-select.html','
\n \n \n \n \n
'); -$templateCache.put('angular-cron-gen/cron-gen.html','\n
\n \n
\n
\n
\n
\n
\n
\n Every\n \n minute(s)\n on second\n \n
\n
\n
\n
\n Every\n \n hour(s) on minute\n \n and second\n \n
\n
\n
\n
\n \n Every\n \n day(s) at\n \n \n
\n
\n \n Every week day (Monday through Friday) at\n \n \n
\n
\n
\n
\n
\n \n Monday\n
\n
\n \n Tuesday\n
\n
\n \n Wednesday\n
\n
\n \n Thursday\n
\n
\n \n Friday\n
\n
\n \n Saturday\n
\n
\n \n Sunday\n
\n
\n Start time\n \n \n
\n
\n
\n \n On the\n \n of every\n \n month(s) at\n \n \n
\n
\n \n On the\n \n \n of every\n \n month(s) at\n \n \n
\n\n
\n
\n
\n \n Every\n \n on the\n \n at\n \n \n
\n
\n \n On the\n \n \n of\n \n at\n \n \n
\n
\n
\n Cron Expression\n \n\n

More details about how to create these expressions can be found here.

\n
\n
\n
\n
\n
\n
\n');}]); \ No newline at end of file +$templateCache.put('angular-cron-gen/cron-gen.html','\n
\n \n
\n
\n
\n
\n
\n
\n {{ \'EVERY\' | translate}}\n \n {{ \'MINUTE\' | translate}}\n {{ \'ON_SECOND\' | translate }} \n \n
\n
\n
\n
\n {{ \'EVERY\' | translate}}\n \n {{ \'HOUR_ON_MINUTE\' | translate}}\n \n {{ \'AND_SECOND\' | translate}}\n \n
\n
\n
\n
\n \n {{ \'EVERY\' | translate}}\n \n {{ \'DAY_AT\' | translate}}\n \n \n
\n
\n \n {{ \'EVERY_WEEK_WORKING_DAY\' | translate}}\n \n \n
\n
\n
\n
\n
\n \n {{ \'MONDAY\' | translate}}\n
\n
\n \n {{ \'TUESDAY\' | translate}}\n
\n
\n \n {{ \'WEDNESDAY\' | translate}}\n
\n
\n \n {{ \'THURSDAY\' | translate}}\n
\n
\n \n {{ \'FRIDAY\' | translate}}\n
\n
\n \n {{ \'SATURDAY\' | translate}}\n
\n
\n \n {{ \'SUNDAY\' | translate}}\n
\n
\n {{ \'START_TIME\' | translate}}\n \n \n
\n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
\n\n
\n
\n
\n \n {{ \'EVERY\' | translate}}\n \n {{ \'ON_THE\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
\n
\n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
\n
\n
\n {{ \'CRON_EXPRESSION\' | translate}}\n \n\n

{{ \'MORE_DETAILS\' | translate}} {{ \'HERE\' | translate}}.

\n
\n
\n
\n
\n
\n
\n');}]); \ No newline at end of file diff --git a/example/app.js b/example/app.js index d27684fe..bfa5147e 100644 --- a/example/app.js +++ b/example/app.js @@ -2,7 +2,8 @@ angular.module('ExampleApp', ['angular-cron-gen']) .controller('ExampleCtrl', ['$scope', function ($scope) { $scope.cronExpression = '0 8 9 9 1/8 ? *'; $scope.cronOptions = { - hideAdvancedTab: false + hideAdvancedTab: false, + language: 'it' }; $scope.isCronDisabled = false; }]); diff --git a/example/index.html b/example/index.html index 94bb8aa5..e6e3b719 100644 --- a/example/index.html +++ b/example/index.html @@ -7,6 +7,7 @@ + diff --git a/package.json b/package.json index dbaad9c4..6841fb6d 100644 --- a/package.json +++ b/package.json @@ -41,5 +41,8 @@ "gulp-uglify": "^2.0.0", "gulp-uglifycss": "^1.0.6", "rollup-plugin-babel": "^2.6.1" + }, + "dependencies": { + "angular-translate": "^2.15.2" } } diff --git a/src/cron-gen.component.js b/src/cron-gen.component.js index 3fd411ba..23176b17 100644 --- a/src/cron-gen.component.js +++ b/src/cron-gen.component.js @@ -1,34 +1,71 @@ const ACCEPTABLE_CRON_FORMATS = ['quartz']; const DAY_LOOKUPS = { - 'SUN': 'Sunday', - 'MON': 'Monday', - 'TUE': 'Tuesday', - 'WED': 'Wednesday', - 'THU': 'Thursday', - 'FRI': 'Friday', - 'SAT': 'Saturday' + 'en': { + 'SUN': 'Sunday', + 'MON': 'Monday', + 'TUE': 'Tuesday', + 'WED': 'Wednesday', + 'THU': 'Thursday', + 'FRI': 'Friday', + 'SAT': 'Saturday' + }, + 'it': { + 'SUN': 'Domenica', + 'MON': "Lunedi'", + 'TUE': "Martedi'", + 'WED': "Mercoledi'", + 'THU': "Giovedi'", + 'FRI': "Venerdi'", + 'SAT': 'Sabato' + } }; const MONTH_WEEK_LOOKUPS = { - '#1': 'First', - '#2': 'Second', - '#3': 'Third', - '#4': 'Fourth', - '#5': 'Fifth', - 'L': 'Last' + 'en': { + '#1': 'First', + '#2': 'Second', + '#3': 'Third', + '#4': 'Fourth', + '#5': 'Fifth', + 'L': 'Last' + }, + 'it': { + '#1': 'Primo', + '#2': 'Secondo', + '#3': 'Terzo', + '#4': 'Quarto', + '#5': 'Quinto', + 'L': 'Ultimo' + } }; const 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' + 'en': { + '1': 'January', + '2': 'February', + '3': 'March', + '4': 'April', + '5': 'May', + '6': 'June', + '7': 'July', + '8': 'August', + '9': 'September', + '10': 'October', + '11': 'November', + '12': 'December' + }, + 'it': { + '1': 'Gennaio', + '2': 'Febbraio', + '3': 'Marzo', + '4': 'Aprile', + '5': 'Maggio', + '6': 'Giugno', + '7': 'Luglio', + '8': 'Agosto', + '9': 'Settembre', + '10': 'Ottobre', + '11': 'Novembre', + '12': 'Dicembre' + } }; const States = { @@ -38,11 +75,14 @@ const States = { }; export class CronGenComponent { - constructor($scope, cronGenService) { + + constructor($scope, $translate, cronGenService) { 'ngInject'; this.parsedOptions = this.mergeDefaultOptions(this.options); + $translate.use(this.parsedOptions.language); + angular.extend(this, { cronGenService, cronFormat: 'quartz', @@ -179,15 +219,15 @@ export class CronGenComponent { } dayDisplay(day) { - return DAY_LOOKUPS[day]; + return DAY_LOOKUPS[this.parsedOptions.language][day]; } monthWeekDisplay(monthWeekNumber) { - return MONTH_WEEK_LOOKUPS[monthWeekNumber]; + return MONTH_WEEK_LOOKUPS[this.parsedOptions.language][monthWeekNumber]; } monthDisplay(monthNumber) { - return MONTH_LOOKUPS[monthNumber]; + return MONTH_LOOKUPS[this.parsedOptions.language][monthNumber]; } monthDayDisplay(monthDay) { @@ -236,7 +276,8 @@ export class CronGenComponent { hideYearlyTab: false, hideAdvancedTab: true, use24HourTime: false, - hideSeconds: false + hideSeconds: false, + language: 'en' }, options); } diff --git a/src/cron-gen.module.js b/src/cron-gen.module.js index a03f56ef..0dd7451f 100644 --- a/src/cron-gen.module.js +++ b/src/cron-gen.module.js @@ -1,8 +1,75 @@ -import {CronGenComponent} from './cron-gen.component'; -import {CronGenService} from './cron-gen.service'; -import {CronGenTimeSelect} from './cron-gen-time-select.component'; +import { CronGenComponent } from './cron-gen.component'; +import { CronGenService } from './cron-gen.service'; +import { CronGenTimeSelect } from './cron-gen-time-select.component'; -angular.module('angular-cron-gen', []) +angular.module('angular-cron-gen', ['pascalprecht.translate']) + .config(function ($translateProvider) { + $translateProvider + .translations('en', { + 'MINUTES': 'Minutes', + 'HOURLY': 'Hourly', + 'DAILY': 'Daily', + 'WEEKLY': 'Weekly', + 'MONTHLY': 'Monthly', + 'YEARLY': 'Yearly', + 'ADVANCED': 'Advanced', + 'EVERY' : 'Every', + 'MINUTE' : 'minute(s)', + 'ON_SECOND' : 'on second', + 'HOUR_ON_MINUTE' : 'hour(s) on minute', + 'AND_SECOND' : 'and second', + 'DAY_AT' : 'day(s) at', + 'EVERY_WEEK_WORKING_DAY' : 'Every week day (Monday through Friday) at', + 'MONDAY' : 'Monday', + 'TUESDAY' : 'Tuesday', + 'WEDNESDAY' :'Wednesday', + 'THURSDAY' :'Thursday', + 'FRIDAY' :'Friday', + 'SATURDAY' :'Saturday', + 'SUNDAY' :'Sunday', + 'START_TIME' : 'Start time', + 'ON_THE' : 'On the', + 'OF_EVERY' : 'of every', + 'MONTHS_AT' : 'month(s) at', + 'AT' : 'at', + 'OF' : 'of', + 'CRON_EXPRESSION' : 'Cron Expression', + 'MORE_DETAILS' : 'More details about how to create these expressions can be found', + 'HERE' : 'here' + }) + .translations('it', { + 'MINUTES': 'Minuti', + 'HOURLY': 'Orario', + 'DAILY': 'Giornaliero', + 'WEEKLY': 'Settimanale', + 'MONTHLY': 'Mensile', + 'YEARLY': 'Annuale', + 'ADVANCED': 'Avanzato', + 'EVERY' : 'Ogni', + 'MINUTE' : 'minuto/i', + 'ON_SECOND' : 'al secondo', + 'HOUR_ON_MINUTE' : 'ora/e al minuto', + 'AND_SECOND' : 'e secondi', + 'DAY_AT' : 'giorno/i alle', + 'EVERY_WEEK_WORKING_DAY' : "Ogni giorno della settimana (dal Lunedi' al Venerdi') alle", + 'MONDAY' : "Lunedi'", + 'TUESDAY' : "Martedi'", + 'WEDNESDAY' : "Mercoledi'", + 'THURSDAY' : "Giovedi'", + 'FRIDAY' : "Venerdi'", + 'SATURDAY' :'Sabato', + 'SUNDAY' :'Domenica', + 'START_TIME' : 'Inizio alle', + 'ON_THE' : 'Il', + 'OF_EVERY' : 'di ogni', + 'MONTHS_AT' : 'mese/i il', + 'AT' : 'il', + 'OF' : 'di', + 'CRON_EXPRESSION' : 'Sintassi Cron', + 'MORE_DETAILS' : 'Maggiori informazioni sulla sintassi Cron li potete trovare', + 'HERE' : 'qui' + }); + }) .service('cronGenService', CronGenService) .component('cronGenTimeSelect', { bindings: { diff --git a/src/templates/cron-gen.html b/src/templates/cron-gen.html index 8837ca48..2bb29ac6 100644 --- a/src/templates/cron-gen.html +++ b/src/templates/cron-gen.html @@ -9,7 +9,7 @@ role="tab" data-toggle="tab" ng-click="$ctrl.setActiveTab($event, 'minutes')"> - Minutes + {{ 'MINUTES' | translate }}
  • - Hourly + {{ 'HOURLY' | translate }}
  • - Daily + {{ 'DAILY' | translate }}
  • - Weekly + {{ 'WEEKLY' | translate }}
  • - Monthly + {{ 'MONTHLY' | translate }}
  • - Yearly + {{ 'YEARLY' | translate }}
  • - Advanced + {{ 'ADVANCED' | translate}}
  • @@ -86,7 +86,7 @@ ng-show="!$ctrl.parsedOptions.hideMinutesTab" ng-class="{'active': $ctrl.activeTab === 'minutes'}">
    - Every + {{ 'EVERY' | translate}} - minute(s) - on second + {{ 'MINUTE' | translate}} + {{ 'ON_SECOND' | translate }} - hour(s) on minute + {{ 'HOUR_ON_MINUTE' | translate}} - and second + {{ 'AND_SECOND' | translate}} - day(s) at + {{ 'DAY_AT' | translate}} - Every week day (Monday through Friday) at + {{ 'EVERY_WEEK_WORKING_DAY' | translate}} - Monday + {{ 'MONDAY' | translate}}
    - Tuesday + {{ 'TUESDAY' | translate}}
    - Wednesday + {{ 'WEDNESDAY' | translate}}
    - Thursday + {{ 'THURSDAY' | translate}}
    - Friday + {{ 'FRIDAY' | translate}}
    - Saturday + {{ 'SATURDAY' | translate}}
    - Sunday + {{ 'SUNDAY' | translate}}
    - Start time + {{ 'START_TIME' | translate}} - On the + {{ 'ON_THE' | translate}} - of every + {{ 'OF_EVERY' | translate}} - month(s) at + {{ 'MONTHS_AT' | translate}} - On the + {{ 'ON_THE' | translate}} - of every + {{ 'OF_EVERY' | translate}} - month(s) at + {{ 'MONTHS_AT' | translate}} - Every + {{ 'EVERY' | translate}} - on the + {{ 'ON_THE' | translate}} - at + {{ 'AT' | translate}} - On the + {{ 'ON_THE' | translate}} - of + {{ 'OF' | translate}} - at + {{ 'AT' | translate}} - Cron Expression + {{ 'CRON_EXPRESSION' | translate}} -

    More details about how to create these expressions can be found {{ 'MORE_DETAILS' | translate}} here.

    + target="_blank">{{ 'HERE' | translate}}.

    From 083ee40e81790361dc3a11738267bdd621b3dbf7 Mon Sep 17 00:00:00 2001 From: David Bonomels Date: Wed, 12 Jul 2017 12:19:07 +0200 Subject: [PATCH 2/2] combo i18n --- build/cron-gen.min.js | 2 +- build/cron-gen.min.js.map | 2 +- build/cron-gen.module.js | 48 +++++++++++++++++++++++++++------------ src/cron-gen.component.js | 11 +++++---- src/cron-gen.module.js | 20 ++++++++++++++-- src/cron-gen.service.js | 13 ++++++----- 6 files changed, 67 insertions(+), 29 deletions(-) diff --git a/build/cron-gen.min.js b/build/cron-gen.min.js index 16d88ff6..b7483523 100644 --- a/build/cron-gen.min.js +++ b/build/cron-gen.min.js @@ -1,4 +1,4 @@ -!function(){"use strict";var e=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t=function(){function e(e,t){for(var n=0;n=12?"PM":"AM"}},{key:"hourToCron",value:function(e,t){return this.parsedOptions.use24HourTime?e:"AM"===t?12===e?0:e:12===e?12:e+12}},{key:"mergeDefaultOptions",value:function(e){return angular.extend({formInputClass:"form-control cron-gen-input",formSelectClass:"form-control cron-gen-select",formRadioClass:"form-control-static cron-gen-radio",formCheckboxClass:"form-control-static cron-gen-checkbox",hideMinutesTab:!1,hideHourlyTab:!1,hideDailyTab:!1,hideWeeklyTab:!1,hideMonthlyTab:!1,hideYearlyTab:!1,hideAdvancedTab:!0,use24HourTime:!1,hideSeconds:!1,language:"en"},e)}},{key:"regenerateCron",value:function(){var e=this;switch(this.currentState=c.DIRTY,this.activeTab){case"minutes":this.ngModel=this.state.minutes.seconds+" 0/"+this.state.minutes.minutes+" * 1/1 * ? *";break;case"hourly":this.ngModel=this.state.hourly.seconds+" "+this.state.hourly.minutes+" 0/"+this.state.hourly.hours+" 1/1 * ? *";break;case"daily":switch(this.state.daily.subTab){case"everyDays":this.ngModel=this.state.daily.everyDays.seconds+" "+this.state.daily.everyDays.minutes+" "+this.hourToCron(this.state.daily.everyDays.hours,this.state.daily.everyDays.hourType)+" 1/"+this.state.daily.everyDays.days+" * ? *";break;case"everyWeekDay":this.ngModel=this.state.daily.everyWeekDay.seconds+" "+this.state.daily.everyWeekDay.minutes+" "+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 t=this.selectOptions.days.reduce(function(t,n){return e.state.weekly[n]?t.concat([n]):t},[]).join(",");this.ngModel=this.state.weekly.seconds+" "+this.state.weekly.minutes+" "+this.hourToCron(this.state.weekly.hours,this.state.weekly.hourType)+" ? * "+t+" *";break;case"monthly":switch(this.state.monthly.subTab){case"specificDay":this.ngModel=this.state.monthly.specificDay.seconds+" "+this.state.monthly.specificDay.minutes+" "+this.hourToCron(this.state.monthly.specificDay.hours,this.state.monthly.specificDay.hourType)+" "+this.state.monthly.specificDay.day+" 1/"+this.state.monthly.specificDay.months+" ? *";break;case"specificWeekDay":this.ngModel=this.state.monthly.specificWeekDay.seconds+" "+this.state.monthly.specificWeekDay.minutes+" "+this.hourToCron(this.state.monthly.specificWeekDay.hours,this.state.monthly.specificWeekDay.hourType)+" ? 1/"+this.state.monthly.specificWeekDay.months+" "+this.state.monthly.specificWeekDay.day+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=this.state.yearly.specificMonthDay.seconds+" "+this.state.yearly.specificMonthDay.minutes+" "+this.hourToCron(this.state.yearly.specificMonthDay.hours,this.state.yearly.specificMonthDay.hourType)+" "+this.state.yearly.specificMonthDay.day+" "+this.state.yearly.specificMonthDay.month+" ? *";break;case"specificMonthWeek":this.ngModel=this.state.yearly.specificMonthWeek.seconds+" "+this.state.yearly.specificMonthWeek.minutes+" "+this.hourToCron(this.state.yearly.specificMonthWeek.hours,this.state.yearly.specificMonthWeek.hourType)+" ? "+this.state.yearly.specificMonthWeek.month+" "+this.state.yearly.specificMonthWeek.day+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(e){var t=this;if(this.currentState===c.DIRTY)return void(this.currentState=c.CLEAN);this.currentState=c.CLEAN;var s=e.split(" ");if(6!==s.length&&7!==s.length)throw"Unsupported cron expression. Expression must be 6 or 7 segments";var a=n(s,6),r=a[0],i=a[1],l=a[2],o=a[3],d=a[4],h=a[5];if(e.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/))this.activeTab="minutes",this.state.minutes.minutes=parseInt(i.substring(2)),this.state.minutes.seconds=parseInt(r);else if(e.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/))this.activeTab="hourly",this.state.hourly.hours=parseInt(l.substring(2)),this.state.hourly.minutes=parseInt(i),this.state.hourly.seconds=parseInt(r);else if(e.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)){this.activeTab="daily",this.state.daily.subTab="everyDays",this.state.daily.everyDays.days=parseInt(o.substring(2));var y=parseInt(l);this.state.daily.everyDays.hours=this.processHour(y),this.state.daily.everyDays.hourType=this.getHourType(y),this.state.daily.everyDays.minutes=parseInt(i),this.state.daily.everyDays.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)){this.activeTab="daily",this.state.daily.subTab="everyWeekDay";var u=parseInt(l);this.state.daily.everyWeekDay.hours=this.processHour(u),this.state.daily.everyWeekDay.hourType=this.getHourType(u),this.state.daily.everyWeekDay.minutes=parseInt(i),this.state.daily.everyWeekDay.seconds=parseInt(r)}else if(e.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(e){return t.state.weekly[e]=!1}),h.split(",").forEach(function(e){return t.state.weekly[e]=!0});var p=parseInt(l);this.state.weekly.hours=this.processHour(p),this.state.weekly.hourType=this.getHourType(p),this.state.weekly.minutes=parseInt(i),this.state.weekly.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)){this.activeTab="monthly",this.state.monthly.subTab="specificDay",this.state.monthly.specificDay.day=o,this.state.monthly.specificDay.months=parseInt(d.substring(2));var m=parseInt(l);this.state.monthly.specificDay.hours=this.processHour(m),this.state.monthly.specificDay.hourType=this.getHourType(m),this.state.monthly.specificDay.minutes=parseInt(i),this.state.monthly.specificDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var g=h.substr(0,3),b=h.substr(3);this.activeTab="monthly",this.state.monthly.subTab="specificWeekDay",this.state.monthly.specificWeekDay.monthWeek=b,this.state.monthly.specificWeekDay.day=g,this.state.monthly.specificWeekDay.months=parseInt(d.substring(2));var $=parseInt(l);this.state.monthly.specificWeekDay.hours=this.processHour($),this.state.monthly.specificWeekDay.hourType=this.getHourType($),this.state.monthly.specificWeekDay.minutes=parseInt(i),this.state.monthly.specificWeekDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)){this.activeTab="yearly",this.state.yearly.subTab="specificMonthDay",this.state.yearly.specificMonthDay.month=parseInt(d),this.state.yearly.specificMonthDay.day=o;var T=parseInt(l);this.state.yearly.specificMonthDay.hours=this.processHour(T),this.state.yearly.specificMonthDay.hourType=this.getHourType(T),this.state.yearly.specificMonthDay.minutes=parseInt(i),this.state.yearly.specificMonthDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var v=h.substr(0,3),f=h.substr(3);this.activeTab="yearly",this.state.yearly.subTab="specificMonthWeek",this.state.yearly.specificMonthWeek.monthWeek=f,this.state.yearly.specificMonthWeek.day=v,this.state.yearly.specificMonthWeek.month=parseInt(d);var D=parseInt(l);this.state.yearly.specificMonthWeek.hours=this.processHour(D),this.state.yearly.specificMonthWeek.hourType=this.getHourType(D),this.state.yearly.specificMonthWeek.minutes=parseInt(i),this.state.yearly.specificMonthWeek.seconds=parseInt(r)}else this.activeTab="advanced",this.state.advanced.expression=e}}]),s}(),d=/^\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}))?)*))$/,h=function(){function n(){e(this,n)}return t(n,[{key:"isValid",value:function(e,t){var n=t.toUpperCase();switch(e){case"quartz":return!!n.match(d);default:throw"Desired cron format ("+e+") is not available"}}},{key:"appendInt",value:function(e){var t=""+e;if(t.length>1){if("1"===t.charAt(t.length-2))return"th"}switch(t.charAt(t.length-1)){case"1":return"st";case"2":return"nd";case"3":return"rd";default:return"th"}}},{key:"padNumber",value:function(e){return 1===(""+e).length?"0"+e:""+e}},{key:"range",value:function(e,t){if(void 0===t&&(t=e,e=0),e<0||t<0)throw"Range values must be positive values";return t>e?[].concat(s(new Array(t-e))).map(function(t,n){return n+e}):e\n \n \n \n \n'), +!function(){"use strict";var e=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t=function(){function e(e,t){for(var n=0;n=12?"PM":"AM"}},{key:"hourToCron",value:function(e,t){return this.parsedOptions.use24HourTime?e:"AM"===t?12===e?0:e:12===e?12:e+12}},{key:"mergeDefaultOptions",value:function(e){return angular.extend({formInputClass:"form-control cron-gen-input",formSelectClass:"form-control cron-gen-select",formRadioClass:"form-control-static cron-gen-radio",formCheckboxClass:"form-control-static cron-gen-checkbox",hideMinutesTab:!1,hideHourlyTab:!1,hideDailyTab:!1,hideWeeklyTab:!1,hideMonthlyTab:!1,hideYearlyTab:!1,hideAdvancedTab:!0,use24HourTime:!1,hideSeconds:!1,language:"en"},e)}},{key:"regenerateCron",value:function(){var e=this;switch(this.currentState=c.DIRTY,this.activeTab){case"minutes":this.ngModel=this.state.minutes.seconds+" 0/"+this.state.minutes.minutes+" * 1/1 * ? *";break;case"hourly":this.ngModel=this.state.hourly.seconds+" "+this.state.hourly.minutes+" 0/"+this.state.hourly.hours+" 1/1 * ? *";break;case"daily":switch(this.state.daily.subTab){case"everyDays":this.ngModel=this.state.daily.everyDays.seconds+" "+this.state.daily.everyDays.minutes+" "+this.hourToCron(this.state.daily.everyDays.hours,this.state.daily.everyDays.hourType)+" 1/"+this.state.daily.everyDays.days+" * ? *";break;case"everyWeekDay":this.ngModel=this.state.daily.everyWeekDay.seconds+" "+this.state.daily.everyWeekDay.minutes+" "+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 t=this.selectOptions.days.reduce(function(t,n){return e.state.weekly[n]?t.concat([n]):t},[]).join(",");this.ngModel=this.state.weekly.seconds+" "+this.state.weekly.minutes+" "+this.hourToCron(this.state.weekly.hours,this.state.weekly.hourType)+" ? * "+t+" *";break;case"monthly":switch(this.state.monthly.subTab){case"specificDay":this.ngModel=this.state.monthly.specificDay.seconds+" "+this.state.monthly.specificDay.minutes+" "+this.hourToCron(this.state.monthly.specificDay.hours,this.state.monthly.specificDay.hourType)+" "+this.state.monthly.specificDay.day+" 1/"+this.state.monthly.specificDay.months+" ? *";break;case"specificWeekDay":this.ngModel=this.state.monthly.specificWeekDay.seconds+" "+this.state.monthly.specificWeekDay.minutes+" "+this.hourToCron(this.state.monthly.specificWeekDay.hours,this.state.monthly.specificWeekDay.hourType)+" ? 1/"+this.state.monthly.specificWeekDay.months+" "+this.state.monthly.specificWeekDay.day+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=this.state.yearly.specificMonthDay.seconds+" "+this.state.yearly.specificMonthDay.minutes+" "+this.hourToCron(this.state.yearly.specificMonthDay.hours,this.state.yearly.specificMonthDay.hourType)+" "+this.state.yearly.specificMonthDay.day+" "+this.state.yearly.specificMonthDay.month+" ? *";break;case"specificMonthWeek":this.ngModel=this.state.yearly.specificMonthWeek.seconds+" "+this.state.yearly.specificMonthWeek.minutes+" "+this.hourToCron(this.state.yearly.specificMonthWeek.hours,this.state.yearly.specificMonthWeek.hourType)+" ? "+this.state.yearly.specificMonthWeek.month+" "+this.state.yearly.specificMonthWeek.day+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(e){var t=this;if(this.currentState===c.DIRTY)return void(this.currentState=c.CLEAN);this.currentState=c.CLEAN;var s=e.split(" ");if(6!==s.length&&7!==s.length)throw"Unsupported cron expression. Expression must be 6 or 7 segments";var a=n(s,6),r=a[0],i=a[1],l=a[2],o=a[3],d=a[4],h=a[5];if(e.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/))this.activeTab="minutes",this.state.minutes.minutes=parseInt(i.substring(2)),this.state.minutes.seconds=parseInt(r);else if(e.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/))this.activeTab="hourly",this.state.hourly.hours=parseInt(l.substring(2)),this.state.hourly.minutes=parseInt(i),this.state.hourly.seconds=parseInt(r);else if(e.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)){this.activeTab="daily",this.state.daily.subTab="everyDays",this.state.daily.everyDays.days=parseInt(o.substring(2));var y=parseInt(l);this.state.daily.everyDays.hours=this.processHour(y),this.state.daily.everyDays.hourType=this.getHourType(y),this.state.daily.everyDays.minutes=parseInt(i),this.state.daily.everyDays.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)){this.activeTab="daily",this.state.daily.subTab="everyWeekDay";var u=parseInt(l);this.state.daily.everyWeekDay.hours=this.processHour(u),this.state.daily.everyWeekDay.hourType=this.getHourType(u),this.state.daily.everyWeekDay.minutes=parseInt(i),this.state.daily.everyWeekDay.seconds=parseInt(r)}else if(e.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(e){return t.state.weekly[e]=!1}),h.split(",").forEach(function(e){return t.state.weekly[e]=!0});var p=parseInt(l);this.state.weekly.hours=this.processHour(p),this.state.weekly.hourType=this.getHourType(p),this.state.weekly.minutes=parseInt(i),this.state.weekly.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)){this.activeTab="monthly",this.state.monthly.subTab="specificDay",this.state.monthly.specificDay.day=o,this.state.monthly.specificDay.months=parseInt(d.substring(2));var m=parseInt(l);this.state.monthly.specificDay.hours=this.processHour(m),this.state.monthly.specificDay.hourType=this.getHourType(m),this.state.monthly.specificDay.minutes=parseInt(i),this.state.monthly.specificDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var g=h.substr(0,3),b=h.substr(3);this.activeTab="monthly",this.state.monthly.subTab="specificWeekDay",this.state.monthly.specificWeekDay.monthWeek=b,this.state.monthly.specificWeekDay.day=g,this.state.monthly.specificWeekDay.months=parseInt(d.substring(2));var T=parseInt(l);this.state.monthly.specificWeekDay.hours=this.processHour(T),this.state.monthly.specificWeekDay.hourType=this.getHourType(T),this.state.monthly.specificWeekDay.minutes=parseInt(i),this.state.monthly.specificWeekDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)){this.activeTab="yearly",this.state.yearly.subTab="specificMonthDay",this.state.yearly.specificMonthDay.month=parseInt(d),this.state.yearly.specificMonthDay.day=o;var $=parseInt(l);this.state.yearly.specificMonthDay.hours=this.processHour($),this.state.yearly.specificMonthDay.hourType=this.getHourType($),this.state.yearly.specificMonthDay.minutes=parseInt(i),this.state.yearly.specificMonthDay.seconds=parseInt(r)}else if(e.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/)){var f=h.substr(0,3),v=h.substr(3);this.activeTab="yearly",this.state.yearly.subTab="specificMonthWeek",this.state.yearly.specificMonthWeek.monthWeek=v,this.state.yearly.specificMonthWeek.day=f,this.state.yearly.specificMonthWeek.month=parseInt(d);var D=parseInt(l);this.state.yearly.specificMonthWeek.hours=this.processHour(D),this.state.yearly.specificMonthWeek.hourType=this.getHourType(D),this.state.yearly.specificMonthWeek.minutes=parseInt(i),this.state.yearly.specificMonthWeek.seconds=parseInt(r)}else this.activeTab="advanced",this.state.advanced.expression=e}}]),s}(),d=/^\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}))?)*))$/,h=function(){function n(t){e(this,n),this.filter=t}return n.$inject=["$filter"],t(n,[{key:"isValid",value:function(e,t){var n=t.toUpperCase();switch(e){case"quartz":return!!n.match(d);default:throw"Desired cron format ("+e+") is not available"}}},{key:"appendInt",value:function(e){var t=""+e;if(t.length>1){if("1"===t.charAt(t.length-2))return this.filter("translate")("CARDINAL_PREFIX")}switch(t.charAt(t.length-1)){case"1":return this.filter("translate")("FIRST_PREFIX");case"2":return this.filter("translate")("SECOND_PREFIX");case"3":return this.filter("translate")("THIRD_PREFIX");default:return this.filter("translate")("CARDINAL_PREFIX")}}},{key:"padNumber",value:function(e){return 1===(""+e).length?"0"+e:""+e}},{key:"range",value:function(e,t){if(void 0===t&&(t=e,e=0),e<0||t<0)throw"Range values must be positive values";return t>e?[].concat(s(new Array(t-e))).map(function(t,n){return n+e}):e\n \n \n \n \n'), e.put("angular-cron-gen/cron-gen.html",'\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n {{ \'EVERY\' | translate}}\n \n {{ \'MINUTE\' | translate}}\n {{ \'ON_SECOND\' | translate }} \n \n
    \n
    \n
    \n
    \n {{ \'EVERY\' | translate}}\n \n {{ \'HOUR_ON_MINUTE\' | translate}}\n \n {{ \'AND_SECOND\' | translate}}\n \n
    \n
    \n
    \n
    \n \n {{ \'EVERY\' | translate}}\n \n {{ \'DAY_AT\' | translate}}\n \n \n
    \n
    \n \n {{ \'EVERY_WEEK_WORKING_DAY\' | translate}}\n \n \n
    \n
    \n
    \n
    \n
    \n \n {{ \'MONDAY\' | translate}}\n
    \n
    \n \n {{ \'TUESDAY\' | translate}}\n
    \n
    \n \n {{ \'WEDNESDAY\' | translate}}\n
    \n
    \n \n {{ \'THURSDAY\' | translate}}\n
    \n
    \n \n {{ \'FRIDAY\' | translate}}\n
    \n
    \n \n {{ \'SATURDAY\' | translate}}\n
    \n
    \n \n {{ \'SUNDAY\' | translate}}\n
    \n
    \n {{ \'START_TIME\' | translate}}\n \n \n
    \n
    \n
    \n \n {{ \'ON_THE\' | translate}}\n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
    \n
    \n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF_EVERY\' | translate}}\n \n {{ \'MONTHS_AT\' | translate}}\n \n \n
    \n\n
    \n
    \n
    \n \n {{ \'EVERY\' | translate}}\n \n {{ \'ON_THE\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
    \n
    \n \n {{ \'ON_THE\' | translate}}\n \n \n {{ \'OF\' | translate}}\n \n {{ \'AT\' | translate}}\n \n \n
    \n
    \n
    \n {{ \'CRON_EXPRESSION\' | translate}}\n \n\n

    {{ \'MORE_DETAILS\' | translate}} {{ \'HERE\' | translate}}.

    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]); //# sourceMappingURL=cron-gen.min.js.map diff --git a/build/cron-gen.min.js.map b/build/cron-gen.min.js.map index e91c128a..93cec514 100644 --- a/build/cron-gen.min.js.map +++ b/build/cron-gen.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["cron-gen.module.js","templates.js"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","err","Array","isArray","toConsumableArray","arr2","from","ACCEPTABLE_CRON_FORMATS","DAY_LOOKUPS","en","SUN","MON","TUE","WED","THU","FRI","SAT","it","MONTH_WEEK_LOOKUPS","#1","#2","#3","#4","#5","L","MONTH_LOOKUPS","1","2","3","4","5","6","7","8","9","10","11","12","States","INIT","DIRTY","CLEAN","CronGenComponent","$scope","$translate","cronGenService","_this","this","parsedOptions","mergeDefaultOptions","options","use","language","angular","extend","cronFormat","currentState","activeTab","hideMinutesTab","hideHourlyTab","hideDailyTab","hideWeeklyTab","hideMonthlyTab","hideYearlyTab","hideAdvancedTab","selectOptions","state","minutes","seconds","hourly","hours","daily","subTab","everyDays","days","use24HourTime","hourType","everyWeekDay","weekly","monthly","specificDay","day","months","specificWeekDay","monthWeek","yearly","specificMonthDay","month","specificMonthWeek","advanced","expression","indexOf","$watch","cron","handleModelChange","_this2","formCtrl","name","ngModelCtrl","$validators","testCronExpr","isValid","$event","tab","preventDefault","ngDisabled","regenerateCron","monthWeekNumber","monthNumber","monthDay","appendInt","hour","formInputClass","formSelectClass","formRadioClass","formCheckboxClass","hideSeconds","_this3","ngModel","hourToCron","reduce","acc","concat","join","_this4","segments","split","_segments","dayOfMonth","dayOfWeek","match","parseInt","substring","parsedHours","processHour","getHourType","_parsedHours","forEach","weekDay","_parsedHours2","_parsedHours3","substr","_parsedHours4","_parsedHours5","_day","_monthWeek","_parsedHours6","QUARTZ_REGEX","CronGenService","formattedExpression","toUpperCase","number","charAt","start","end","map","val","idx","range","monthWeeks","fullMinutes","monthDays","monthDaysWithLasts","CronGenTimeSelect","hourTypes","module","config","$translateProvider","translations","MINUTES","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY","ADVANCED","EVERY","MINUTE","ON_SECOND","HOUR_ON_MINUTE","AND_SECOND","DAY_AT","EVERY_WEEK_WORKING_DAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY","START_TIME","ON_THE","OF_EVERY","MONTHS_AT","AT","OF","CRON_EXPRESSION","MORE_DETAILS","HERE","service","component","bindings","isDisabled","onChange","isRequired","model","selectClass","namePrefix","templateUrl","controller","require","ngDisabledCtrl","$attrs","$templateCache","put"],"mappings":"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","file":"cron-gen.min.js","sourcesContent":["(function () {\n'use strict';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar ACCEPTABLE_CRON_FORMATS = ['quartz'];\nvar DAY_LOOKUPS = {\n 'en': {\n 'SUN': 'Sunday',\n 'MON': 'Monday',\n 'TUE': 'Tuesday',\n 'WED': 'Wednesday',\n 'THU': 'Thursday',\n 'FRI': 'Friday',\n 'SAT': 'Saturday'\n },\n 'it': {\n 'SUN': 'Domenica',\n 'MON': \"Lunedi'\",\n 'TUE': \"Martedi'\",\n 'WED': \"Mercoledi'\",\n 'THU': \"Giovedi'\",\n 'FRI': \"Venerdi'\",\n 'SAT': 'Sabato'\n }\n};\nvar MONTH_WEEK_LOOKUPS = {\n 'en': {\n '#1': 'First',\n '#2': 'Second',\n '#3': 'Third',\n '#4': 'Fourth',\n '#5': 'Fifth',\n 'L': 'Last'\n },\n 'it': {\n '#1': 'Primo',\n '#2': 'Secondo',\n '#3': 'Terzo',\n '#4': 'Quarto',\n '#5': 'Quinto',\n 'L': 'Ultimo'\n }\n};\nvar MONTH_LOOKUPS = {\n 'en': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n },\n 'it': {\n '1': 'Gennaio',\n '2': 'Febbraio',\n '3': 'Marzo',\n '4': 'Aprile',\n '5': 'Maggio',\n '6': 'Giugno',\n '7': 'Luglio',\n '8': 'Agosto',\n '9': 'Settembre',\n '10': 'Ottobre',\n '11': 'Novembre',\n '12': 'Dicembre'\n }\n};\n\nvar States = {\n INIT: 1,\n DIRTY: 2,\n CLEAN: 3\n};\n\nvar CronGenComponent = function () {\n function CronGenComponent($scope, $translate, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenComponent);\n this.parsedOptions = this.mergeDefaultOptions(this.options);\n\n $translate.use(this.parsedOptions.language);\n\n angular.extend(this, {\n cronGenService: cronGenService,\n cronFormat: 'quartz',\n currentState: States.INIT,\n activeTab: function () {\n if (!_this.parsedOptions.hideMinutesTab) {\n return 'minutes';\n } else if (!_this.parsedOptions.hideHourlyTab) {\n return 'hourly';\n } else if (!_this.parsedOptions.hideDailyTab) {\n return 'daily';\n } else if (!_this.parsedOptions.hideWeeklyTab) {\n return 'weekly';\n } else if (!_this.parsedOptions.hideMonthlyTab) {\n return 'monthly';\n } else if (!_this.parsedOptions.hideYearlyTab) {\n return 'yearly';\n } else if (!_this.parsedOptions.hideAdvancedTab) {\n return 'advanced';\n }\n throw 'No tabs available to make active';\n }(),\n selectOptions: cronGenService.selectOptions(),\n state: {\n minutes: {\n minutes: 1,\n seconds: 0\n },\n hourly: {\n hours: 1,\n minutes: 0,\n seconds: 0\n },\n daily: {\n subTab: 'everyDays',\n everyDays: {\n days: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n everyWeekDay: {\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n weekly: {\n MON: true,\n TUE: false,\n WED: false,\n THU: false,\n FRI: false,\n SAT: false,\n SUN: false,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n monthly: {\n subTab: 'specificDay',\n specificDay: {\n day: '1',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificWeekDay: {\n monthWeek: '#1',\n day: 'MON',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n yearly: {\n subTab: 'specificMonthDay',\n specificMonthDay: {\n month: 1,\n day: '1',\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificMonthWeek: {\n monthWeek: '#1',\n day: 'MON',\n month: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n advanced: {\n expression: '0 15 10 L-2 * ?'\n }\n }\n });\n\n //Validate our opts\n if (ACCEPTABLE_CRON_FORMATS.indexOf(this.cronFormat) == -1) {\n throw 'Desired cron format (' + this.cronFormat + ') is not available';\n }\n\n //On model changes, update our state to reflect the user's input\n $scope.$watch('$ctrl.ngModel', function (cron) {\n return _this.handleModelChange(cron);\n });\n\n // Watch for option changes\n $scope.$watch('$ctrl.options', function (options) {\n return _this.parsedOptions = _this.mergeDefaultOptions(options);\n }, true);\n }\n\n createClass(CronGenComponent, [{\n key: '$onInit',\n value: function $onInit() {\n var _this2 = this;\n\n //If possible, add our cron expression validator to our form\n if (this.formCtrl && this.name) {\n this.ngModelCtrl.$validators.testCronExpr = function (expression) {\n return _this2.cronGenService.isValid(_this2.cronFormat, expression);\n };\n }\n }\n }, {\n key: 'setActiveTab',\n value: function setActiveTab($event, tab) {\n $event.preventDefault();\n if (!this.ngDisabled) {\n this.activeTab = tab;\n this.regenerateCron();\n }\n }\n }, {\n key: 'dayDisplay',\n value: function dayDisplay(day) {\n return DAY_LOOKUPS[this.parsedOptions.language][day];\n }\n }, {\n key: 'monthWeekDisplay',\n value: function monthWeekDisplay(monthWeekNumber) {\n return MONTH_WEEK_LOOKUPS[this.parsedOptions.language][monthWeekNumber];\n }\n }, {\n key: 'monthDisplay',\n value: function monthDisplay(monthNumber) {\n return MONTH_LOOKUPS[this.parsedOptions.language][monthNumber];\n }\n }, {\n key: 'monthDayDisplay',\n value: function monthDayDisplay(monthDay) {\n if (monthDay === 'L') {\n return 'Last Day';\n } else if (monthDay === 'LW') {\n return 'Last Weekday';\n } else if (monthDay === '1W') {\n return 'First Weekday';\n } else {\n return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' Day';\n }\n }\n }, {\n key: 'processHour',\n value: function processHour(hours) {\n if (this.parsedOptions.use24HourTime) {\n return hours;\n } else {\n return (hours + 11) % 12 + 1;\n }\n }\n }, {\n key: 'getHourType',\n value: function getHourType(hours) {\n return this.parsedOptions.use24HourTime ? null : hours >= 12 ? 'PM' : 'AM';\n }\n }, {\n key: 'hourToCron',\n value: function hourToCron(hour, hourType) {\n if (this.parsedOptions.use24HourTime) {\n return hour;\n } else {\n return hourType === 'AM' ? hour === 12 ? 0 : hour : hour === 12 ? 12 : hour + 12;\n }\n }\n }, {\n key: 'mergeDefaultOptions',\n value: function mergeDefaultOptions(options) {\n return angular.extend({\n formInputClass: 'form-control cron-gen-input',\n formSelectClass: 'form-control cron-gen-select',\n formRadioClass: 'form-control-static cron-gen-radio',\n formCheckboxClass: 'form-control-static cron-gen-checkbox',\n hideMinutesTab: false,\n hideHourlyTab: false,\n hideDailyTab: false,\n hideWeeklyTab: false,\n hideMonthlyTab: false,\n hideYearlyTab: false,\n hideAdvancedTab: true,\n use24HourTime: false,\n hideSeconds: false,\n language: 'en'\n }, options);\n }\n }, {\n key: 'regenerateCron',\n value: function regenerateCron() {\n var _this3 = this;\n\n this.currentState = States.DIRTY;\n switch (this.activeTab) {\n case 'minutes':\n this.ngModel = this.state.minutes.seconds + ' 0/' + this.state.minutes.minutes + ' * 1/1 * ? *';\n break;\n case 'hourly':\n this.ngModel = this.state.hourly.seconds + ' ' + this.state.hourly.minutes + ' 0/' + this.state.hourly.hours + ' 1/1 * ? *';\n break;\n case 'daily':\n switch (this.state.daily.subTab) {\n case 'everyDays':\n this.ngModel = this.state.daily.everyDays.seconds + ' ' + this.state.daily.everyDays.minutes + ' ' + this.hourToCron(this.state.daily.everyDays.hours, this.state.daily.everyDays.hourType) + ' 1/' + this.state.daily.everyDays.days + ' * ? *';\n break;\n case 'everyWeekDay':\n this.ngModel = this.state.daily.everyWeekDay.seconds + ' ' + this.state.daily.everyWeekDay.minutes + ' ' + this.hourToCron(this.state.daily.everyWeekDay.hours, this.state.daily.everyWeekDay.hourType) + ' ? * MON-FRI *';\n break;\n default:\n throw 'Invalid cron daily subtab selection';\n }\n break;\n case 'weekly':\n var days = this.selectOptions.days.reduce(function (acc, day) {\n return _this3.state.weekly[day] ? acc.concat([day]) : acc;\n }, []).join(',');\n this.ngModel = this.state.weekly.seconds + ' ' + this.state.weekly.minutes + ' ' + this.hourToCron(this.state.weekly.hours, this.state.weekly.hourType) + ' ? * ' + days + ' *';\n break;\n case 'monthly':\n switch (this.state.monthly.subTab) {\n case 'specificDay':\n this.ngModel = this.state.monthly.specificDay.seconds + ' ' + this.state.monthly.specificDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificDay.hours, this.state.monthly.specificDay.hourType) + ' ' + this.state.monthly.specificDay.day + ' 1/' + this.state.monthly.specificDay.months + ' ? *';\n break;\n case 'specificWeekDay':\n this.ngModel = this.state.monthly.specificWeekDay.seconds + ' ' + this.state.monthly.specificWeekDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificWeekDay.hours, this.state.monthly.specificWeekDay.hourType) + ' ? 1/' + this.state.monthly.specificWeekDay.months + ' ' + this.state.monthly.specificWeekDay.day + this.state.monthly.specificWeekDay.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron monthly subtab selection';\n }\n break;\n case 'yearly':\n switch (this.state.yearly.subTab) {\n case 'specificMonthDay':\n this.ngModel = this.state.yearly.specificMonthDay.seconds + ' ' + this.state.yearly.specificMonthDay.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthDay.hours, this.state.yearly.specificMonthDay.hourType) + ' ' + this.state.yearly.specificMonthDay.day + ' ' + this.state.yearly.specificMonthDay.month + ' ? *';\n break;\n case 'specificMonthWeek':\n this.ngModel = this.state.yearly.specificMonthWeek.seconds + ' ' + this.state.yearly.specificMonthWeek.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthWeek.hours, this.state.yearly.specificMonthWeek.hourType) + ' ? ' + this.state.yearly.specificMonthWeek.month + ' ' + this.state.yearly.specificMonthWeek.day + this.state.yearly.specificMonthWeek.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron yearly subtab selection';\n }\n break;\n case 'advanced':\n this.ngModel = this.state.advanced.expression;\n break;\n default:\n throw 'Invalid cron active tab selection';\n }\n }\n }, {\n key: 'handleModelChange',\n value: function handleModelChange(cron) {\n var _this4 = this;\n\n if (this.currentState === States.DIRTY) {\n this.currentState = States.CLEAN;\n return;\n } else {\n this.currentState = States.CLEAN;\n }\n\n var segments = cron.split(' ');\n if (segments.length === 6 || segments.length === 7) {\n var _segments = slicedToArray(segments, 6),\n seconds = _segments[0],\n minutes = _segments[1],\n hours = _segments[2],\n dayOfMonth = _segments[3],\n month = _segments[4],\n dayOfWeek = _segments[5];\n\n if (cron.match(/\\d+ 0\\/\\d+ \\* 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'minutes';\n this.state.minutes.minutes = parseInt(minutes.substring(2));\n this.state.minutes.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'hourly';\n this.state.hourly.hours = parseInt(hours.substring(2));\n this.state.hourly.minutes = parseInt(minutes);\n this.state.hourly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ 1\\/\\d+ \\* \\? \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyDays';\n this.state.daily.everyDays.days = parseInt(dayOfMonth.substring(2));\n var parsedHours = parseInt(hours);\n this.state.daily.everyDays.hours = this.processHour(parsedHours);\n this.state.daily.everyDays.hourType = this.getHourType(parsedHours);\n this.state.daily.everyDays.minutes = parseInt(minutes);\n this.state.daily.everyDays.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* MON-FRI \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyWeekDay';\n var _parsedHours = parseInt(hours);\n this.state.daily.everyWeekDay.hours = this.processHour(_parsedHours);\n this.state.daily.everyWeekDay.hourType = this.getHourType(_parsedHours);\n this.state.daily.everyWeekDay.minutes = parseInt(minutes);\n this.state.daily.everyWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/)) {\n this.activeTab = 'weekly';\n this.selectOptions.days.forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = false;\n });\n dayOfWeek.split(',').forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = true;\n });\n var _parsedHours2 = parseInt(hours);\n this.state.weekly.hours = this.processHour(_parsedHours2);\n this.state.weekly.hourType = this.getHourType(_parsedHours2);\n this.state.weekly.minutes = parseInt(minutes);\n this.state.weekly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ \\? \\*/)) {\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificDay';\n this.state.monthly.specificDay.day = dayOfMonth;\n this.state.monthly.specificDay.months = parseInt(month.substring(2));\n var _parsedHours3 = parseInt(hours);\n this.state.monthly.specificDay.hours = this.processHour(_parsedHours3);\n this.state.monthly.specificDay.hourType = this.getHourType(_parsedHours3);\n this.state.monthly.specificDay.minutes = parseInt(minutes);\n this.state.monthly.specificDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var day = dayOfWeek.substr(0, 3);\n var monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificWeekDay';\n this.state.monthly.specificWeekDay.monthWeek = monthWeek;\n this.state.monthly.specificWeekDay.day = day;\n this.state.monthly.specificWeekDay.months = parseInt(month.substring(2));\n var _parsedHours4 = parseInt(hours);\n this.state.monthly.specificWeekDay.hours = this.processHour(_parsedHours4);\n this.state.monthly.specificWeekDay.hourType = this.getHourType(_parsedHours4);\n this.state.monthly.specificWeekDay.minutes = parseInt(minutes);\n this.state.monthly.specificWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ \\? \\*/)) {\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthDay';\n this.state.yearly.specificMonthDay.month = parseInt(month);\n this.state.yearly.specificMonthDay.day = dayOfMonth;\n var _parsedHours5 = parseInt(hours);\n this.state.yearly.specificMonthDay.hours = this.processHour(_parsedHours5);\n this.state.yearly.specificMonthDay.hourType = this.getHourType(_parsedHours5);\n this.state.yearly.specificMonthDay.minutes = parseInt(minutes);\n this.state.yearly.specificMonthDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var _day = dayOfWeek.substr(0, 3);\n var _monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthWeek';\n this.state.yearly.specificMonthWeek.monthWeek = _monthWeek;\n this.state.yearly.specificMonthWeek.day = _day;\n this.state.yearly.specificMonthWeek.month = parseInt(month);\n var _parsedHours6 = parseInt(hours);\n this.state.yearly.specificMonthWeek.hours = this.processHour(_parsedHours6);\n this.state.yearly.specificMonthWeek.hourType = this.getHourType(_parsedHours6);\n this.state.yearly.specificMonthWeek.minutes = parseInt(minutes);\n this.state.yearly.specificMonthWeek.seconds = parseInt(seconds);\n } else {\n this.activeTab = 'advanced';\n this.state.advanced.expression = cron;\n }\n } else {\n throw 'Unsupported cron expression. Expression must be 6 or 7 segments';\n }\n }\n }]);\n return CronGenComponent;\n}();\n\nvar 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}))?)*))$/;\n\nvar CronGenService = function () {\n function CronGenService() {\n classCallCheck(this, CronGenService);\n }\n\n createClass(CronGenService, [{\n key: 'isValid',\n value: function isValid(cronFormat, expression) {\n var formattedExpression = expression.toUpperCase();\n switch (cronFormat) {\n case 'quartz':\n return !!formattedExpression.match(QUARTZ_REGEX);\n default:\n throw 'Desired cron format (' + cronFormat + ') is not available';\n }\n }\n }, {\n key: 'appendInt',\n value: function appendInt(number) {\n var value = '' + number;\n if (value.length > 1) {\n var secondToLastDigit = value.charAt(value.length - 2);\n if (secondToLastDigit === '1') {\n return \"th\";\n }\n }\n var lastDigit = value.charAt(value.length - 1);\n switch (lastDigit) {\n case '1':\n return \"st\";\n case '2':\n return \"nd\";\n case '3':\n return \"rd\";\n default:\n return \"th\";\n }\n }\n }, {\n key: 'padNumber',\n value: function padNumber(number) {\n return ('' + number).length === 1 ? '0' + number : '' + number;\n }\n }, {\n key: 'range',\n value: function range(start, end) {\n if (typeof end === 'undefined') {\n end = start;\n start = 0;\n }\n\n if (start < 0 || end < 0) throw 'Range values must be positive values';\n\n if (end > start) {\n return [].concat(toConsumableArray(new Array(end - start))).map(function (val, idx) {\n return idx + start;\n });\n } else if (start < end) {\n return [].concat(toConsumableArray(new Array(start - end))).map(function (val, idx) {\n return end - idx;\n });\n } else return new Array();\n }\n }, {\n key: 'selectOptions',\n value: function selectOptions() {\n return {\n months: this.range(1, 13),\n monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n days: ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],\n minutes: this.range(1, 60),\n fullMinutes: this.range(60),\n seconds: this.range(60),\n hours: this.range(1, 24),\n monthDays: this.range(1, 32),\n monthDaysWithLasts: ['1W'].concat(toConsumableArray([].concat(toConsumableArray(new Array(31))).map(function (val, idx) {\n return '' + (idx + 1);\n })), ['LW', 'L'])\n };\n }\n }]);\n return CronGenService;\n}();\n\nvar CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenTimeSelect);\n this.cronGenService = cronGenService;\n\n this.selectOptions = {\n minutes: cronGenService.range(60),\n seconds: cronGenService.range(60),\n hourTypes: ['AM', 'PM']\n };\n\n $scope.$watch('$ctrl.use24HourTime', function () {\n _this.selectOptions.hours = _this.use24HourTime ? _this.cronGenService.range(24) : _this.cronGenService.range(1, 13);\n });\n};\n\nangular.module('angular-cron-gen', ['pascalprecht.translate']).config(function ($translateProvider) {\n $translateProvider.translations('en', {\n 'MINUTES': 'Minutes',\n 'HOURLY': 'Hourly',\n 'DAILY': 'Daily',\n 'WEEKLY': 'Weekly',\n 'MONTHLY': 'Monthly',\n 'YEARLY': 'Yearly',\n 'ADVANCED': 'Advanced',\n 'EVERY': 'Every',\n 'MINUTE': 'minute(s)',\n 'ON_SECOND': 'on second',\n 'HOUR_ON_MINUTE': 'hour(s) on minute',\n 'AND_SECOND': 'and second',\n 'DAY_AT': 'day(s) at',\n 'EVERY_WEEK_WORKING_DAY': 'Every week day (Monday through Friday) at',\n 'MONDAY': 'Monday',\n 'TUESDAY': 'Tuesday',\n 'WEDNESDAY': 'Wednesday',\n 'THURSDAY': 'Thursday',\n 'FRIDAY': 'Friday',\n 'SATURDAY': 'Saturday',\n 'SUNDAY': 'Sunday',\n 'START_TIME': 'Start time',\n 'ON_THE': 'On the',\n 'OF_EVERY': 'of every',\n 'MONTHS_AT': 'month(s) at',\n 'AT': 'at',\n 'OF': 'of',\n 'CRON_EXPRESSION': 'Cron Expression',\n 'MORE_DETAILS': 'More details about how to create these expressions can be found',\n 'HERE': 'here'\n }).translations('it', {\n 'MINUTES': 'Minuti',\n 'HOURLY': 'Orario',\n 'DAILY': 'Giornaliero',\n 'WEEKLY': 'Settimanale',\n 'MONTHLY': 'Mensile',\n 'YEARLY': 'Annuale',\n 'ADVANCED': 'Avanzato',\n 'EVERY': 'Ogni',\n 'MINUTE': 'minuto/i',\n 'ON_SECOND': 'al secondo',\n 'HOUR_ON_MINUTE': 'ora/e al minuto',\n 'AND_SECOND': 'e secondi',\n 'DAY_AT': 'giorno/i alle',\n 'EVERY_WEEK_WORKING_DAY': \"Ogni giorno della settimana (dal Lunedi' al Venerdi') alle\",\n 'MONDAY': \"Lunedi'\",\n 'TUESDAY': \"Martedi'\",\n 'WEDNESDAY': \"Mercoledi'\",\n 'THURSDAY': \"Giovedi'\",\n 'FRIDAY': \"Venerdi'\",\n 'SATURDAY': 'Sabato',\n 'SUNDAY': 'Domenica',\n 'START_TIME': 'Inizio alle',\n 'ON_THE': 'Il',\n 'OF_EVERY': 'di ogni',\n 'MONTHS_AT': 'mese/i il',\n 'AT': 'il',\n 'OF': 'di',\n 'CRON_EXPRESSION': 'Sintassi Cron',\n 'MORE_DETAILS': 'Maggiori informazioni sulla sintassi Cron li potete trovare',\n 'HERE': 'qui'\n });\n}).service('cronGenService', CronGenService).component('cronGenTimeSelect', {\n bindings: {\n isDisabled: '<',\n onChange: '&',\n isRequired: '<',\n model: '=',\n selectClass: '<',\n use24HourTime: '<',\n hideSeconds: '<',\n namePrefix: '@'\n },\n templateUrl: 'angular-cron-gen/cron-gen-time-select.html',\n controller: CronGenTimeSelect\n}).component('cronGen', {\n bindings: {\n ngModel: '=',\n ngDisabled: '<',\n options: '<',\n cronFormat: '@',\n templateUrl: '@',\n name: '@'\n },\n require: {\n ngModelCtrl: 'ngModel',\n ngDisabledCtrl: '?ngDisabled',\n formCtrl: '^?form'\n },\n templateUrl: function templateUrl($attrs) {\n 'ngInject';\n\n return $attrs.templateUrl || 'angular-cron-gen/cron-gen.html';\n },\n\n controller: CronGenComponent\n});\n\n}());\n","angular.module('angular-cron-gen').run(['$templateCache', function($templateCache) {$templateCache.put('angular-cron-gen/cron-gen-time-select.html','
    \\n \\n \\n \\n \\n
    ');\n$templateCache.put('angular-cron-gen/cron-gen.html','\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'MINUTE\\' | translate}}\\n {{ \\'ON_SECOND\\' | translate }} \\n \\n
    \\n
    \\n
    \\n
    \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'HOUR_ON_MINUTE\\' | translate}}\\n \\n {{ \\'AND_SECOND\\' | translate}}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'DAY_AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'EVERY_WEEK_WORKING_DAY\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{ \\'MONDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'TUESDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'WEDNESDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'THURSDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'FRIDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'SATURDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'SUNDAY\\' | translate}}\\n
    \\n
    \\n {{ \\'START_TIME\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n {{ \\'CRON_EXPRESSION\\' | translate}}\\n \\n\\n

    {{ \\'MORE_DETAILS\\' | translate}} {{ \\'HERE\\' | translate}}.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n');}]);"]} \ No newline at end of file +{"version":3,"sources":["cron-gen.module.js","templates.js"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","value","err","Array","isArray","toConsumableArray","arr2","from","ACCEPTABLE_CRON_FORMATS","DAY_LOOKUPS","en","SUN","MON","TUE","WED","THU","FRI","SAT","it","MONTH_WEEK_LOOKUPS","#1","#2","#3","#4","#5","L","MONTH_LOOKUPS","1","2","3","4","5","6","7","8","9","10","11","12","States","INIT","DIRTY","CLEAN","CronGenComponent","$scope","$translate","$filter","cronGenService","_this","this","parsedOptions","mergeDefaultOptions","options","use","language","angular","extend","filter","cronFormat","currentState","activeTab","hideMinutesTab","hideHourlyTab","hideDailyTab","hideWeeklyTab","hideMonthlyTab","hideYearlyTab","hideAdvancedTab","selectOptions","state","minutes","seconds","hourly","hours","daily","subTab","everyDays","days","use24HourTime","hourType","everyWeekDay","weekly","monthly","specificDay","day","months","specificWeekDay","monthWeek","yearly","specificMonthDay","month","specificMonthWeek","advanced","expression","indexOf","$watch","cron","handleModelChange","_this2","formCtrl","name","ngModelCtrl","$validators","testCronExpr","isValid","$event","tab","preventDefault","ngDisabled","regenerateCron","monthWeekNumber","monthNumber","monthDay","appendInt","hour","formInputClass","formSelectClass","formRadioClass","formCheckboxClass","hideSeconds","_this3","ngModel","hourToCron","reduce","acc","concat","join","_this4","segments","split","_segments","dayOfMonth","dayOfWeek","match","parseInt","substring","parsedHours","processHour","getHourType","_parsedHours","forEach","weekDay","_parsedHours2","_parsedHours3","substr","_parsedHours4","_parsedHours5","_day","_monthWeek","_parsedHours6","QUARTZ_REGEX","CronGenService","formattedExpression","toUpperCase","number","charAt","start","end","map","val","idx","range","monthWeeks","fullMinutes","monthDays","monthDaysWithLasts","CronGenTimeSelect","hourTypes","module","config","$translateProvider","translations","MINUTES","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY","ADVANCED","EVERY","MINUTE","ON_SECOND","HOUR_ON_MINUTE","AND_SECOND","DAY_AT","EVERY_WEEK_WORKING_DAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY","START_TIME","ON_THE","OF_EVERY","MONTHS_AT","AT","OF","CRON_EXPRESSION","MORE_DETAILS","HERE","LAST_DAY","LAST_WEEKDAY","FIRST_WEEKDAY","DAY","FIRST_PREFIX","SECOND_PREFIX","THIRD_PREFIX","CARDINAL_PREFIX","service","component","bindings","isDisabled","onChange","isRequired","model","selectClass","namePrefix","templateUrl","controller","require","ngDisabledCtrl","$attrs","$templateCache","put"],"mappings":"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","file":"cron-gen.min.js","sourcesContent":["(function () {\n'use strict';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar ACCEPTABLE_CRON_FORMATS = ['quartz'];\nvar DAY_LOOKUPS = {\n 'en': {\n 'SUN': 'Sunday',\n 'MON': 'Monday',\n 'TUE': 'Tuesday',\n 'WED': 'Wednesday',\n 'THU': 'Thursday',\n 'FRI': 'Friday',\n 'SAT': 'Saturday'\n },\n 'it': {\n 'SUN': 'Domenica',\n 'MON': \"Lunedi'\",\n 'TUE': \"Martedi'\",\n 'WED': \"Mercoledi'\",\n 'THU': \"Giovedi'\",\n 'FRI': \"Venerdi'\",\n 'SAT': 'Sabato'\n }\n};\nvar MONTH_WEEK_LOOKUPS = {\n 'en': {\n '#1': 'First',\n '#2': 'Second',\n '#3': 'Third',\n '#4': 'Fourth',\n '#5': 'Fifth',\n 'L': 'Last'\n },\n 'it': {\n '#1': 'Primo',\n '#2': 'Secondo',\n '#3': 'Terzo',\n '#4': 'Quarto',\n '#5': 'Quinto',\n 'L': 'Ultimo'\n }\n};\nvar MONTH_LOOKUPS = {\n 'en': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n },\n 'it': {\n '1': 'Gennaio',\n '2': 'Febbraio',\n '3': 'Marzo',\n '4': 'Aprile',\n '5': 'Maggio',\n '6': 'Giugno',\n '7': 'Luglio',\n '8': 'Agosto',\n '9': 'Settembre',\n '10': 'Ottobre',\n '11': 'Novembre',\n '12': 'Dicembre'\n }\n};\n\nvar States = {\n INIT: 1,\n DIRTY: 2,\n CLEAN: 3\n};\n\nvar CronGenComponent = function () {\n function CronGenComponent($scope, $translate, $filter, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenComponent);\n this.parsedOptions = this.mergeDefaultOptions(this.options);\n\n $translate.use(this.parsedOptions.language);\n\n angular.extend(this, {\n cronGenService: cronGenService,\n filter: $filter,\n cronFormat: 'quartz',\n currentState: States.INIT,\n activeTab: function () {\n if (!_this.parsedOptions.hideMinutesTab) {\n return 'minutes';\n } else if (!_this.parsedOptions.hideHourlyTab) {\n return 'hourly';\n } else if (!_this.parsedOptions.hideDailyTab) {\n return 'daily';\n } else if (!_this.parsedOptions.hideWeeklyTab) {\n return 'weekly';\n } else if (!_this.parsedOptions.hideMonthlyTab) {\n return 'monthly';\n } else if (!_this.parsedOptions.hideYearlyTab) {\n return 'yearly';\n } else if (!_this.parsedOptions.hideAdvancedTab) {\n return 'advanced';\n }\n throw 'No tabs available to make active';\n }(),\n selectOptions: cronGenService.selectOptions(),\n state: {\n minutes: {\n minutes: 1,\n seconds: 0\n },\n hourly: {\n hours: 1,\n minutes: 0,\n seconds: 0\n },\n daily: {\n subTab: 'everyDays',\n everyDays: {\n days: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n everyWeekDay: {\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n weekly: {\n MON: true,\n TUE: false,\n WED: false,\n THU: false,\n FRI: false,\n SAT: false,\n SUN: false,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n monthly: {\n subTab: 'specificDay',\n specificDay: {\n day: '1',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificWeekDay: {\n monthWeek: '#1',\n day: 'MON',\n months: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n yearly: {\n subTab: 'specificMonthDay',\n specificMonthDay: {\n month: 1,\n day: '1',\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n },\n specificMonthWeek: {\n monthWeek: '#1',\n day: 'MON',\n month: 1,\n hours: this.parsedOptions.use24HourTime ? 0 : 1,\n minutes: 0,\n seconds: 0,\n hourType: this.parsedOptions.use24HourTime ? null : 'AM'\n }\n },\n advanced: {\n expression: '0 15 10 L-2 * ?'\n }\n }\n });\n\n //Validate our opts\n if (ACCEPTABLE_CRON_FORMATS.indexOf(this.cronFormat) == -1) {\n throw 'Desired cron format (' + this.cronFormat + ') is not available';\n }\n\n //On model changes, update our state to reflect the user's input\n $scope.$watch('$ctrl.ngModel', function (cron) {\n return _this.handleModelChange(cron);\n });\n\n // Watch for option changes\n $scope.$watch('$ctrl.options', function (options) {\n return _this.parsedOptions = _this.mergeDefaultOptions(options);\n }, true);\n }\n\n createClass(CronGenComponent, [{\n key: '$onInit',\n value: function $onInit() {\n var _this2 = this;\n\n //If possible, add our cron expression validator to our form\n if (this.formCtrl && this.name) {\n this.ngModelCtrl.$validators.testCronExpr = function (expression) {\n return _this2.cronGenService.isValid(_this2.cronFormat, expression);\n };\n }\n }\n }, {\n key: 'setActiveTab',\n value: function setActiveTab($event, tab) {\n $event.preventDefault();\n if (!this.ngDisabled) {\n this.activeTab = tab;\n this.regenerateCron();\n }\n }\n }, {\n key: 'dayDisplay',\n value: function dayDisplay(day) {\n return DAY_LOOKUPS[this.parsedOptions.language][day];\n }\n }, {\n key: 'monthWeekDisplay',\n value: function monthWeekDisplay(monthWeekNumber) {\n return MONTH_WEEK_LOOKUPS[this.parsedOptions.language][monthWeekNumber];\n }\n }, {\n key: 'monthDisplay',\n value: function monthDisplay(monthNumber) {\n return MONTH_LOOKUPS[this.parsedOptions.language][monthNumber];\n }\n }, {\n key: 'monthDayDisplay',\n value: function monthDayDisplay(monthDay) {\n if (monthDay === 'L') {\n return this.filter('translate')('LAST_DAY');\n } else if (monthDay === 'LW') {\n return this.filter('translate')('LAST_WEEKDAY');\n } else if (monthDay === '1W') {\n return this.filter('translate')('FIRST_WEEKDAY');\n } else {\n return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' ' + this.filter('translate')('DAY');\n }\n }\n }, {\n key: 'processHour',\n value: function processHour(hours) {\n if (this.parsedOptions.use24HourTime) {\n return hours;\n } else {\n return (hours + 11) % 12 + 1;\n }\n }\n }, {\n key: 'getHourType',\n value: function getHourType(hours) {\n return this.parsedOptions.use24HourTime ? null : hours >= 12 ? 'PM' : 'AM';\n }\n }, {\n key: 'hourToCron',\n value: function hourToCron(hour, hourType) {\n if (this.parsedOptions.use24HourTime) {\n return hour;\n } else {\n return hourType === 'AM' ? hour === 12 ? 0 : hour : hour === 12 ? 12 : hour + 12;\n }\n }\n }, {\n key: 'mergeDefaultOptions',\n value: function mergeDefaultOptions(options) {\n return angular.extend({\n formInputClass: 'form-control cron-gen-input',\n formSelectClass: 'form-control cron-gen-select',\n formRadioClass: 'form-control-static cron-gen-radio',\n formCheckboxClass: 'form-control-static cron-gen-checkbox',\n hideMinutesTab: false,\n hideHourlyTab: false,\n hideDailyTab: false,\n hideWeeklyTab: false,\n hideMonthlyTab: false,\n hideYearlyTab: false,\n hideAdvancedTab: true,\n use24HourTime: false,\n hideSeconds: false,\n language: 'en'\n }, options);\n }\n }, {\n key: 'regenerateCron',\n value: function regenerateCron() {\n var _this3 = this;\n\n this.currentState = States.DIRTY;\n switch (this.activeTab) {\n case 'minutes':\n this.ngModel = this.state.minutes.seconds + ' 0/' + this.state.minutes.minutes + ' * 1/1 * ? *';\n break;\n case 'hourly':\n this.ngModel = this.state.hourly.seconds + ' ' + this.state.hourly.minutes + ' 0/' + this.state.hourly.hours + ' 1/1 * ? *';\n break;\n case 'daily':\n switch (this.state.daily.subTab) {\n case 'everyDays':\n this.ngModel = this.state.daily.everyDays.seconds + ' ' + this.state.daily.everyDays.minutes + ' ' + this.hourToCron(this.state.daily.everyDays.hours, this.state.daily.everyDays.hourType) + ' 1/' + this.state.daily.everyDays.days + ' * ? *';\n break;\n case 'everyWeekDay':\n this.ngModel = this.state.daily.everyWeekDay.seconds + ' ' + this.state.daily.everyWeekDay.minutes + ' ' + this.hourToCron(this.state.daily.everyWeekDay.hours, this.state.daily.everyWeekDay.hourType) + ' ? * MON-FRI *';\n break;\n default:\n throw 'Invalid cron daily subtab selection';\n }\n break;\n case 'weekly':\n var days = this.selectOptions.days.reduce(function (acc, day) {\n return _this3.state.weekly[day] ? acc.concat([day]) : acc;\n }, []).join(',');\n this.ngModel = this.state.weekly.seconds + ' ' + this.state.weekly.minutes + ' ' + this.hourToCron(this.state.weekly.hours, this.state.weekly.hourType) + ' ? * ' + days + ' *';\n break;\n case 'monthly':\n switch (this.state.monthly.subTab) {\n case 'specificDay':\n this.ngModel = this.state.monthly.specificDay.seconds + ' ' + this.state.monthly.specificDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificDay.hours, this.state.monthly.specificDay.hourType) + ' ' + this.state.monthly.specificDay.day + ' 1/' + this.state.monthly.specificDay.months + ' ? *';\n break;\n case 'specificWeekDay':\n this.ngModel = this.state.monthly.specificWeekDay.seconds + ' ' + this.state.monthly.specificWeekDay.minutes + ' ' + this.hourToCron(this.state.monthly.specificWeekDay.hours, this.state.monthly.specificWeekDay.hourType) + ' ? 1/' + this.state.monthly.specificWeekDay.months + ' ' + this.state.monthly.specificWeekDay.day + this.state.monthly.specificWeekDay.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron monthly subtab selection';\n }\n break;\n case 'yearly':\n switch (this.state.yearly.subTab) {\n case 'specificMonthDay':\n this.ngModel = this.state.yearly.specificMonthDay.seconds + ' ' + this.state.yearly.specificMonthDay.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthDay.hours, this.state.yearly.specificMonthDay.hourType) + ' ' + this.state.yearly.specificMonthDay.day + ' ' + this.state.yearly.specificMonthDay.month + ' ? *';\n break;\n case 'specificMonthWeek':\n this.ngModel = this.state.yearly.specificMonthWeek.seconds + ' ' + this.state.yearly.specificMonthWeek.minutes + ' ' + this.hourToCron(this.state.yearly.specificMonthWeek.hours, this.state.yearly.specificMonthWeek.hourType) + ' ? ' + this.state.yearly.specificMonthWeek.month + ' ' + this.state.yearly.specificMonthWeek.day + this.state.yearly.specificMonthWeek.monthWeek + ' *';\n break;\n default:\n throw 'Invalid cron yearly subtab selection';\n }\n break;\n case 'advanced':\n this.ngModel = this.state.advanced.expression;\n break;\n default:\n throw 'Invalid cron active tab selection';\n }\n }\n }, {\n key: 'handleModelChange',\n value: function handleModelChange(cron) {\n var _this4 = this;\n\n if (this.currentState === States.DIRTY) {\n this.currentState = States.CLEAN;\n return;\n } else {\n this.currentState = States.CLEAN;\n }\n\n var segments = cron.split(' ');\n if (segments.length === 6 || segments.length === 7) {\n var _segments = slicedToArray(segments, 6),\n seconds = _segments[0],\n minutes = _segments[1],\n hours = _segments[2],\n dayOfMonth = _segments[3],\n month = _segments[4],\n dayOfWeek = _segments[5];\n\n if (cron.match(/\\d+ 0\\/\\d+ \\* 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'minutes';\n this.state.minutes.minutes = parseInt(minutes.substring(2));\n this.state.minutes.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* \\? \\*/)) {\n this.activeTab = 'hourly';\n this.state.hourly.hours = parseInt(hours.substring(2));\n this.state.hourly.minutes = parseInt(minutes);\n this.state.hourly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ 1\\/\\d+ \\* \\? \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyDays';\n this.state.daily.everyDays.days = parseInt(dayOfMonth.substring(2));\n var parsedHours = parseInt(hours);\n this.state.daily.everyDays.hours = this.processHour(parsedHours);\n this.state.daily.everyDays.hourType = this.getHourType(parsedHours);\n this.state.daily.everyDays.minutes = parseInt(minutes);\n this.state.daily.everyDays.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* MON-FRI \\*/)) {\n this.activeTab = 'daily';\n this.state.daily.subTab = 'everyWeekDay';\n var _parsedHours = parseInt(hours);\n this.state.daily.everyWeekDay.hours = this.processHour(_parsedHours);\n this.state.daily.everyWeekDay.hourType = this.getHourType(_parsedHours);\n this.state.daily.everyWeekDay.minutes = parseInt(minutes);\n this.state.daily.everyWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/)) {\n this.activeTab = 'weekly';\n this.selectOptions.days.forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = false;\n });\n dayOfWeek.split(',').forEach(function (weekDay) {\n return _this4.state.weekly[weekDay] = true;\n });\n var _parsedHours2 = parseInt(hours);\n this.state.weekly.hours = this.processHour(_parsedHours2);\n this.state.weekly.hourType = this.getHourType(_parsedHours2);\n this.state.weekly.minutes = parseInt(minutes);\n this.state.weekly.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ \\? \\*/)) {\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificDay';\n this.state.monthly.specificDay.day = dayOfMonth;\n this.state.monthly.specificDay.months = parseInt(month.substring(2));\n var _parsedHours3 = parseInt(hours);\n this.state.monthly.specificDay.hours = this.processHour(_parsedHours3);\n this.state.monthly.specificDay.hourType = this.getHourType(_parsedHours3);\n this.state.monthly.specificDay.minutes = parseInt(minutes);\n this.state.monthly.specificDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var day = dayOfWeek.substr(0, 3);\n var monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'monthly';\n this.state.monthly.subTab = 'specificWeekDay';\n this.state.monthly.specificWeekDay.monthWeek = monthWeek;\n this.state.monthly.specificWeekDay.day = day;\n this.state.monthly.specificWeekDay.months = parseInt(month.substring(2));\n var _parsedHours4 = parseInt(hours);\n this.state.monthly.specificWeekDay.hours = this.processHour(_parsedHours4);\n this.state.monthly.specificWeekDay.hourType = this.getHourType(_parsedHours4);\n this.state.monthly.specificWeekDay.minutes = parseInt(minutes);\n this.state.monthly.specificWeekDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ \\? \\*/)) {\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthDay';\n this.state.yearly.specificMonthDay.month = parseInt(month);\n this.state.yearly.specificMonthDay.day = dayOfMonth;\n var _parsedHours5 = parseInt(hours);\n this.state.yearly.specificMonthDay.hours = this.processHour(_parsedHours5);\n this.state.yearly.specificMonthDay.hourType = this.getHourType(_parsedHours5);\n this.state.yearly.specificMonthDay.minutes = parseInt(minutes);\n this.state.yearly.specificMonthDay.seconds = parseInt(seconds);\n } else if (cron.match(/\\d+ \\d+ \\d+ \\? \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/)) {\n var _day = dayOfWeek.substr(0, 3);\n var _monthWeek = dayOfWeek.substr(3);\n this.activeTab = 'yearly';\n this.state.yearly.subTab = 'specificMonthWeek';\n this.state.yearly.specificMonthWeek.monthWeek = _monthWeek;\n this.state.yearly.specificMonthWeek.day = _day;\n this.state.yearly.specificMonthWeek.month = parseInt(month);\n var _parsedHours6 = parseInt(hours);\n this.state.yearly.specificMonthWeek.hours = this.processHour(_parsedHours6);\n this.state.yearly.specificMonthWeek.hourType = this.getHourType(_parsedHours6);\n this.state.yearly.specificMonthWeek.minutes = parseInt(minutes);\n this.state.yearly.specificMonthWeek.seconds = parseInt(seconds);\n } else {\n this.activeTab = 'advanced';\n this.state.advanced.expression = cron;\n }\n } else {\n throw 'Unsupported cron expression. Expression must be 6 or 7 segments';\n }\n }\n }]);\n return CronGenComponent;\n}();\n\nvar 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}))?)*))$/;\n\nvar CronGenService = function () {\n function CronGenService($filter) {\n classCallCheck(this, CronGenService);\n\n this.filter = $filter;\n }\n\n createClass(CronGenService, [{\n key: 'isValid',\n value: function isValid(cronFormat, expression) {\n var formattedExpression = expression.toUpperCase();\n switch (cronFormat) {\n case 'quartz':\n return !!formattedExpression.match(QUARTZ_REGEX);\n default:\n throw 'Desired cron format (' + cronFormat + ') is not available';\n }\n }\n }, {\n key: 'appendInt',\n value: function appendInt(number) {\n var value = '' + number;\n if (value.length > 1) {\n var secondToLastDigit = value.charAt(value.length - 2);\n if (secondToLastDigit === '1') {\n return this.filter('translate')('CARDINAL_PREFIX');\n }\n }\n var lastDigit = value.charAt(value.length - 1);\n switch (lastDigit) {\n case '1':\n return this.filter('translate')('FIRST_PREFIX');\n case '2':\n return this.filter('translate')('SECOND_PREFIX');\n case '3':\n return this.filter('translate')('THIRD_PREFIX');\n default:\n return this.filter('translate')('CARDINAL_PREFIX');\n }\n }\n }, {\n key: 'padNumber',\n value: function padNumber(number) {\n return ('' + number).length === 1 ? '0' + number : '' + number;\n }\n }, {\n key: 'range',\n value: function range(start, end) {\n if (typeof end === 'undefined') {\n end = start;\n start = 0;\n }\n\n if (start < 0 || end < 0) throw 'Range values must be positive values';\n\n if (end > start) {\n return [].concat(toConsumableArray(new Array(end - start))).map(function (val, idx) {\n return idx + start;\n });\n } else if (start < end) {\n return [].concat(toConsumableArray(new Array(start - end))).map(function (val, idx) {\n return end - idx;\n });\n } else return new Array();\n }\n }, {\n key: 'selectOptions',\n value: function selectOptions() {\n return {\n months: this.range(1, 13),\n monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n days: ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],\n minutes: this.range(1, 60),\n fullMinutes: this.range(60),\n seconds: this.range(60),\n hours: this.range(1, 24),\n monthDays: this.range(1, 32),\n monthDaysWithLasts: ['1W'].concat(toConsumableArray([].concat(toConsumableArray(new Array(31))).map(function (val, idx) {\n return '' + (idx + 1);\n })), ['LW', 'L'])\n };\n }\n }]);\n return CronGenService;\n}();\n\nvar CronGenTimeSelect = function CronGenTimeSelect($scope, cronGenService) {\n 'ngInject';\n\n var _this = this;\n\n classCallCheck(this, CronGenTimeSelect);\n this.cronGenService = cronGenService;\n\n this.selectOptions = {\n minutes: cronGenService.range(60),\n seconds: cronGenService.range(60),\n hourTypes: ['AM', 'PM']\n };\n\n $scope.$watch('$ctrl.use24HourTime', function () {\n _this.selectOptions.hours = _this.use24HourTime ? _this.cronGenService.range(24) : _this.cronGenService.range(1, 13);\n });\n};\n\nangular.module('angular-cron-gen', ['pascalprecht.translate']).config(function ($translateProvider) {\n $translateProvider.translations('en', {\n 'MINUTES': 'Minutes',\n 'HOURLY': 'Hourly',\n 'DAILY': 'Daily',\n 'WEEKLY': 'Weekly',\n 'MONTHLY': 'Monthly',\n 'YEARLY': 'Yearly',\n 'ADVANCED': 'Advanced',\n 'EVERY': 'Every',\n 'MINUTE': 'minute(s)',\n 'ON_SECOND': 'on second',\n 'HOUR_ON_MINUTE': 'hour(s) on minute',\n 'AND_SECOND': 'and second',\n 'DAY_AT': 'day(s) at',\n 'EVERY_WEEK_WORKING_DAY': 'Every week day (Monday through Friday) at',\n 'MONDAY': 'Monday',\n 'TUESDAY': 'Tuesday',\n 'WEDNESDAY': 'Wednesday',\n 'THURSDAY': 'Thursday',\n 'FRIDAY': 'Friday',\n 'SATURDAY': 'Saturday',\n 'SUNDAY': 'Sunday',\n 'START_TIME': 'Start time',\n 'ON_THE': 'On the',\n 'OF_EVERY': 'of every',\n 'MONTHS_AT': 'month(s) at',\n 'AT': 'at',\n 'OF': 'of',\n 'CRON_EXPRESSION': 'Cron Expression',\n 'MORE_DETAILS': 'More details about how to create these expressions can be found',\n 'HERE': 'here',\n 'LAST_DAY': 'Last day',\n 'LAST_WEEKDAY': 'Last Weekday',\n 'FIRST_WEEKDAY': 'First Weekday',\n 'DAY': 'Day',\n 'FIRST_PREFIX': 'st',\n 'SECOND_PREFIX': 'nd',\n 'THIRD_PREFIX': 'rd',\n 'CARDINAL_PREFIX': 'th'\n }).translations('it', {\n 'MINUTES': 'Minuti',\n 'HOURLY': 'Orario',\n 'DAILY': 'Giornaliero',\n 'WEEKLY': 'Settimanale',\n 'MONTHLY': 'Mensile',\n 'YEARLY': 'Annuale',\n 'ADVANCED': 'Avanzato',\n 'EVERY': 'Ogni',\n 'MINUTE': 'minuto/i',\n 'ON_SECOND': 'al secondo',\n 'HOUR_ON_MINUTE': 'ora/e al minuto',\n 'AND_SECOND': 'e secondi',\n 'DAY_AT': 'giorno/i alle',\n 'EVERY_WEEK_WORKING_DAY': \"Ogni giorno della settimana (dal Lunedi' al Venerdi') alle\",\n 'MONDAY': \"Lunedi'\",\n 'TUESDAY': \"Martedi'\",\n 'WEDNESDAY': \"Mercoledi'\",\n 'THURSDAY': \"Giovedi'\",\n 'FRIDAY': \"Venerdi'\",\n 'SATURDAY': 'Sabato',\n 'SUNDAY': 'Domenica',\n 'START_TIME': 'Inizio alle',\n 'ON_THE': 'Il',\n 'OF_EVERY': 'di ogni',\n 'MONTHS_AT': 'mese/i il',\n 'AT': 'il',\n 'OF': 'di',\n 'CRON_EXPRESSION': 'Sintassi Cron',\n 'MORE_DETAILS': 'Maggiori informazioni sulla sintassi Cron li potete trovare',\n 'HERE': 'qui',\n 'LAST_DAY': 'Ultimo giorno',\n 'LAST_WEEKDAY': 'Fine settimana',\n 'FIRST_WEEKDAY': 'Inizio settimana',\n 'DAY': 'Giorno',\n 'FIRST_PREFIX': '',\n 'SECOND_PREFIX': '',\n 'THIRD_PREFIX': '',\n 'CARDINAL_PREFIX': ''\n });\n}).service('cronGenService', CronGenService).component('cronGenTimeSelect', {\n bindings: {\n isDisabled: '<',\n onChange: '&',\n isRequired: '<',\n model: '=',\n selectClass: '<',\n use24HourTime: '<',\n hideSeconds: '<',\n namePrefix: '@'\n },\n templateUrl: 'angular-cron-gen/cron-gen-time-select.html',\n controller: CronGenTimeSelect\n}).component('cronGen', {\n bindings: {\n ngModel: '=',\n ngDisabled: '<',\n options: '<',\n cronFormat: '@',\n templateUrl: '@',\n name: '@'\n },\n require: {\n ngModelCtrl: 'ngModel',\n ngDisabledCtrl: '?ngDisabled',\n formCtrl: '^?form'\n },\n templateUrl: function templateUrl($attrs) {\n 'ngInject';\n\n return $attrs.templateUrl || 'angular-cron-gen/cron-gen.html';\n },\n\n controller: CronGenComponent\n});\n\n}());\n","angular.module('angular-cron-gen').run(['$templateCache', function($templateCache) {$templateCache.put('angular-cron-gen/cron-gen-time-select.html','
    \\n \\n \\n \\n \\n
    ');\n$templateCache.put('angular-cron-gen/cron-gen.html','\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'MINUTE\\' | translate}}\\n {{ \\'ON_SECOND\\' | translate }} \\n \\n
    \\n
    \\n
    \\n
    \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'HOUR_ON_MINUTE\\' | translate}}\\n \\n {{ \\'AND_SECOND\\' | translate}}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'DAY_AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'EVERY_WEEK_WORKING_DAY\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{ \\'MONDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'TUESDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'WEDNESDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'THURSDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'FRIDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'SATURDAY\\' | translate}}\\n
    \\n
    \\n \\n {{ \\'SUNDAY\\' | translate}}\\n
    \\n
    \\n {{ \\'START_TIME\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF_EVERY\\' | translate}}\\n \\n {{ \\'MONTHS_AT\\' | translate}}\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n {{ \\'EVERY\\' | translate}}\\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
    \\n
    \\n \\n {{ \\'ON_THE\\' | translate}}\\n \\n \\n {{ \\'OF\\' | translate}}\\n \\n {{ \\'AT\\' | translate}}\\n \\n \\n
    \\n
    \\n
    \\n {{ \\'CRON_EXPRESSION\\' | translate}}\\n \\n\\n

    {{ \\'MORE_DETAILS\\' | translate}} {{ \\'HERE\\' | translate}}.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n');}]);"]} \ No newline at end of file diff --git a/build/cron-gen.module.js b/build/cron-gen.module.js index ed978653..6ed21d94 100644 --- a/build/cron-gen.module.js +++ b/build/cron-gen.module.js @@ -188,8 +188,8 @@ var States = { }; var CronGenComponent = function () { - CronGenComponent.$inject = ["$scope", "$translate", "cronGenService"]; - function CronGenComponent($scope, $translate, cronGenService) { + CronGenComponent.$inject = ["$scope", "$translate", "$filter", "cronGenService"]; + function CronGenComponent($scope, $translate, $filter, cronGenService) { 'ngInject'; var _this = this; @@ -201,6 +201,7 @@ var CronGenComponent = function () { angular.extend(this, { cronGenService: cronGenService, + filter: $filter, cronFormat: 'quartz', currentState: States.INIT, activeTab: function () { @@ -363,13 +364,13 @@ var CronGenComponent = function () { key: 'monthDayDisplay', value: function monthDayDisplay(monthDay) { if (monthDay === 'L') { - return 'Last Day'; + return this.filter('translate')('LAST_DAY'); } else if (monthDay === 'LW') { - return 'Last Weekday'; + return this.filter('translate')('LAST_WEEKDAY'); } else if (monthDay === '1W') { - return 'First Weekday'; + return this.filter('translate')('FIRST_WEEKDAY'); } else { - return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' Day'; + return '' + monthDay + this.cronGenService.appendInt(monthDay) + ' ' + this.filter('translate')('DAY'); } } }, { @@ -599,8 +600,11 @@ var CronGenComponent = function () { 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 = function () { - function CronGenService() { + CronGenService.$inject = ["$filter"]; + function CronGenService($filter) { classCallCheck(this, CronGenService); + + this.filter = $filter; } createClass(CronGenService, [{ @@ -621,19 +625,19 @@ var CronGenService = function () { if (value.length > 1) { var secondToLastDigit = value.charAt(value.length - 2); if (secondToLastDigit === '1') { - return "th"; + return this.filter('translate')('CARDINAL_PREFIX'); } } var lastDigit = value.charAt(value.length - 1); switch (lastDigit) { case '1': - return "st"; + return this.filter('translate')('FIRST_PREFIX'); case '2': - return "nd"; + return this.filter('translate')('SECOND_PREFIX'); case '3': - return "rd"; + return this.filter('translate')('THIRD_PREFIX'); default: - return "th"; + return this.filter('translate')('CARDINAL_PREFIX'); } } }, { @@ -733,7 +737,15 @@ angular.module('angular-cron-gen', ['pascalprecht.translate']).config(["$transla 'OF': 'of', 'CRON_EXPRESSION': 'Cron Expression', 'MORE_DETAILS': 'More details about how to create these expressions can be found', - 'HERE': 'here' + 'HERE': 'here', + 'LAST_DAY': 'Last day', + 'LAST_WEEKDAY': 'Last Weekday', + 'FIRST_WEEKDAY': 'First Weekday', + 'DAY': 'Day', + 'FIRST_PREFIX': 'st', + 'SECOND_PREFIX': 'nd', + 'THIRD_PREFIX': 'rd', + 'CARDINAL_PREFIX': 'th' }).translations('it', { 'MINUTES': 'Minuti', 'HOURLY': 'Orario', @@ -764,7 +776,15 @@ angular.module('angular-cron-gen', ['pascalprecht.translate']).config(["$transla 'OF': 'di', 'CRON_EXPRESSION': 'Sintassi Cron', 'MORE_DETAILS': 'Maggiori informazioni sulla sintassi Cron li potete trovare', - 'HERE': 'qui' + 'HERE': 'qui', + 'LAST_DAY': 'Ultimo giorno', + 'LAST_WEEKDAY': 'Fine settimana', + 'FIRST_WEEKDAY': 'Inizio settimana', + 'DAY': 'Giorno', + 'FIRST_PREFIX': '', + 'SECOND_PREFIX': '', + 'THIRD_PREFIX': '', + 'CARDINAL_PREFIX': '' }); }]).service('cronGenService', CronGenService).component('cronGenTimeSelect', { bindings: { diff --git a/src/cron-gen.component.js b/src/cron-gen.component.js index 23176b17..6a00827d 100644 --- a/src/cron-gen.component.js +++ b/src/cron-gen.component.js @@ -76,7 +76,7 @@ const States = { export class CronGenComponent { - constructor($scope, $translate, cronGenService) { + constructor($scope, $translate, $filter, cronGenService) { 'ngInject'; this.parsedOptions = this.mergeDefaultOptions(this.options); @@ -85,6 +85,7 @@ export class CronGenComponent { angular.extend(this, { cronGenService, + filter: $filter, cronFormat: 'quartz', currentState: States.INIT, activeTab: (() => { @@ -232,13 +233,13 @@ export class CronGenComponent { monthDayDisplay(monthDay) { if (monthDay === 'L') { - return 'Last Day'; + return this.filter('translate')('LAST_DAY'); } else if (monthDay === 'LW') { - return 'Last Weekday'; + return this.filter('translate')('LAST_WEEKDAY'); } else if (monthDay === '1W') { - return 'First Weekday'; + return this.filter('translate')('FIRST_WEEKDAY'); } else { - return `${monthDay}${this.cronGenService.appendInt(monthDay)} Day`; + return `${monthDay}${this.cronGenService.appendInt(monthDay)} ${this.filter('translate')('DAY')}`; } } diff --git a/src/cron-gen.module.js b/src/cron-gen.module.js index 0dd7451f..3bea47b8 100644 --- a/src/cron-gen.module.js +++ b/src/cron-gen.module.js @@ -35,7 +35,15 @@ angular.module('angular-cron-gen', ['pascalprecht.translate']) 'OF' : 'of', 'CRON_EXPRESSION' : 'Cron Expression', 'MORE_DETAILS' : 'More details about how to create these expressions can be found', - 'HERE' : 'here' + 'HERE' : 'here', + 'LAST_DAY' : 'Last day', + 'LAST_WEEKDAY' : 'Last Weekday', + 'FIRST_WEEKDAY' : 'First Weekday', + 'DAY' : 'Day', + 'FIRST_PREFIX' : 'st', + 'SECOND_PREFIX' : 'nd', + 'THIRD_PREFIX' : 'rd', + 'CARDINAL_PREFIX' : 'th' }) .translations('it', { 'MINUTES': 'Minuti', @@ -67,7 +75,15 @@ angular.module('angular-cron-gen', ['pascalprecht.translate']) 'OF' : 'di', 'CRON_EXPRESSION' : 'Sintassi Cron', 'MORE_DETAILS' : 'Maggiori informazioni sulla sintassi Cron li potete trovare', - 'HERE' : 'qui' + 'HERE' : 'qui', + 'LAST_DAY' : 'Ultimo giorno', + 'LAST_WEEKDAY' : 'Fine settimana', + 'FIRST_WEEKDAY' : 'Inizio settimana', + 'DAY' : 'Giorno', + 'FIRST_PREFIX' : '', + 'SECOND_PREFIX' : '', + 'THIRD_PREFIX' : '', + 'CARDINAL_PREFIX' : '' }); }) .service('cronGenService', CronGenService) diff --git a/src/cron-gen.service.js b/src/cron-gen.service.js index eda73d97..4de2e386 100644 --- a/src/cron-gen.service.js +++ b/src/cron-gen.service.js @@ -1,7 +1,8 @@ const 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}))?)*))$/; export class CronGenService { - constructor() { + constructor($filter) { + this.filter = $filter; } isValid(cronFormat, expression) { @@ -19,19 +20,19 @@ export class CronGenService { if (value.length > 1) { const secondToLastDigit = value.charAt(value.length - 2); if (secondToLastDigit === '1') { - return "th"; + return this.filter('translate')('CARDINAL_PREFIX'); } } const lastDigit = value.charAt(value.length - 1); switch (lastDigit) { case '1': - return "st"; + return this.filter('translate')('FIRST_PREFIX'); case '2': - return "nd"; + return this.filter('translate')('SECOND_PREFIX'); case '3': - return "rd"; + return this.filter('translate')('THIRD_PREFIX'); default: - return "th"; + return this.filter('translate')('CARDINAL_PREFIX'); } }