cron-editor
Version:
A cron expression generator to be used in Angular applications
2 lines • 39.1 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/forms"),require("@angular/common")):"function"==typeof define&&define.amd?define("cron-editor",["exports","@angular/core","@angular/forms","@angular/common"],t):t(e["cron-editor"]={},e.ng.core,e.ng.forms,e.ng.common)}(this,function(e,t,s,n){"use strict";function b(e,t){var s="function"==typeof Symbol&&e[Symbol.iterator];if(!s)return e;var n,a,o=s.call(e),i=[];try{for(;(void 0===t||0<t--)&&!(n=o.next()).done;)i.push(n.value)}catch(r){a={error:r}}finally{try{n&&!n.done&&(s=o["return"])&&s.call(o)}finally{if(a)throw a.error}}return i}var a={SUN:"Sunday",MON:"Monday",TUE:"Tuesday",WED:"Wednesday",THU:"Thursday",FRI:"Friday",SAT:"Saturday"},o={"#1":"First","#2":"Second","#3":"Third","#4":"Fourth","#5":"Fifth",L:"Last"},i={January:1,February:2,March:3,April:4,May:5,June:6,July:7,August:8,September:9,October:10,November:11,December:12};i[i.January]="January",i[i.February]="February",i[i.March]="March",i[i.April]="April",i[i.May]="May",i[i.June]="June",i[i.July]="July",i[i.August]="August",i[i.September]="September",i[i.October]="October",i[i.November]="November",i[i.December]="December";var r=function(){function e(){}return e.getRange=function(s,e){return Array.from({length:e+1-s},function(e,t){return t+s})},e}(),l=function(){function e(){this.cronChange=new t.EventEmitter,this.selectOptions=this.getSelectOptions()}return Object.defineProperty(e.prototype,"cron",{get:function(){return this.localCron},set:function(e){this.localCron=e,this.cronChange.emit(this.localCron)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.options.removeSeconds&&(this.options.hideSeconds=!0),this.state=this.getDefaultState(),this.handleModelChange(this.cron)},e.prototype.ngOnChanges=function(e){var t=e.cron;t&&!t.firstChange&&this.handleModelChange(this.cron)},e.prototype.setActiveTab=function(e){this.disabled||(this.activeTab=e,this.regenerateCron())},e.prototype.dayDisplay=function(e){return a[e]},e.prototype.monthWeekDisplay=function(e){return o[e]},e.prototype.monthDisplay=function(e){return i[e]},e.prototype.monthDayDisplay=function(e){return"L"===e?"Last Day":"LW"===e?"Last Weekday":"1W"===e?"First Weekday":""+e+this.getOrdinalSuffix(e)+" day"},e.prototype.regenerateCron=function(){var s=this;switch(this.isDirty=!0,this.activeTab){case"minutes":this.cron="0/"+this.state.minutes.minutes+" * 1/1 * ?",this.options.removeSeconds||(this.cron=this.state.minutes.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"hourly":this.cron=this.state.hourly.minutes+" 0/"+this.state.hourly.hours+" 1/1 * ?",this.options.removeSeconds||(this.cron=this.state.hourly.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"daily":switch(this.state.daily.subTab){case"everyDays":this.cron=this.state.daily.everyDays.minutes+" "+this.hourToCron(this.state.daily.everyDays.hours,this.state.daily.everyDays.hourType)+" 1/"+this.state.daily.everyDays.days+" * ?",this.options.removeSeconds||(this.cron=this.state.daily.everyDays.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"everyWeekDay":this.cron=this.state.daily.everyWeekDay.minutes+" "+this.hourToCron(this.state.daily.everyWeekDay.hours,this.state.daily.everyWeekDay.hourType)+" ? * MON-FRI",this.options.removeSeconds||(this.cron=this.state.daily.everyWeekDay.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;default:throw new Error("Invalid cron daily subtab selection")}break;case"weekly":var e=this.selectOptions.days.reduce(function(e,t){return s.state.weekly[t]?e.concat([t]):e},[]).join(",");this.cron=this.state.weekly.minutes+" "+this.hourToCron(this.state.weekly.hours,this.state.weekly.hourType)+" ? * "+e,this.options.removeSeconds||(this.cron=this.state.weekly.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"monthly":switch(this.state.monthly.subTab){case"specificDay":var t=this.state.monthly.runOnWeekday?this.state.monthly.specificDay.day+"W":this.state.monthly.specificDay.day;this.cron=this.state.monthly.specificDay.minutes+" "+this.hourToCron(this.state.monthly.specificDay.hours,this.state.monthly.specificDay.hourType)+" "+t+" 1/"+this.state.monthly.specificDay.months+" ?",this.options.removeSeconds||(this.cron=this.state.monthly.specificDay.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"specificWeekDay":this.cron=this.state.monthly.specificWeekDay.minutes+" "+this.hourToCron(this.state.monthly.specificWeekDay.hours,this.state.monthly.specificWeekDay.hourType)+" ? "+this.state.monthly.specificWeekDay.startMonth+"/"+this.state.monthly.specificWeekDay.months+" "+this.state.monthly.specificWeekDay.day+this.state.monthly.specificWeekDay.monthWeek,this.options.removeSeconds||(this.cron=this.state.monthly.specificWeekDay.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;default:throw new Error("Invalid cron monthly subtab selection")}break;case"yearly":switch(this.state.yearly.subTab){case"specificMonthDay":t=this.state.yearly.runOnWeekday?this.state.yearly.specificMonthDay.day+"W":this.state.yearly.specificMonthDay.day;this.cron=this.state.yearly.specificMonthDay.minutes+" "+this.hourToCron(this.state.yearly.specificMonthDay.hours,this.state.yearly.specificMonthDay.hourType)+" "+t+" "+this.state.yearly.specificMonthDay.month+" ?",this.options.removeSeconds||(this.cron=this.state.yearly.specificMonthDay.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;case"specificMonthWeek":this.cron=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,this.options.removeSeconds||(this.cron=this.state.yearly.specificMonthWeek.seconds+" "+this.cron),this.options.removeYears||(this.cron=this.cron+" *");break;default:throw new Error("Invalid cron yearly subtab selection")}break;case"advanced":this.cron=this.state.advanced.expression;break;default:throw new Error("Invalid cron active tab selection")}},e.prototype.getAmPmHour=function(e){return this.options.use24HourTime?e:(e+11)%12+1},e.prototype.getHourType=function(e){return this.options.use24HourTime?undefined:12<=e?"PM":"AM"},e.prototype.hourToCron=function(e,t){return this.options.use24HourTime?e:"AM"===t?12===e?0:e:12===e?12:e+12},e.prototype.handleModelChange=function(e){var t=this;if(this.isDirty)this.isDirty=!1;else{this.isDirty=!1,this.validate(e);var s=e;this.options.removeSeconds&&(s="0 "+e),this.options.removeYears&&(s+=" *");var n=b(s.split(" "),6),a=n[0],o=n[1],i=n[2],r=n[3],l=n[4],c=n[5];if(s.match(/\d+ 0\/\d+ \* 1\/1 \* \? \*/))this.activeTab="minutes",this.state.minutes.minutes=Number(o.substring(2)),this.state.minutes.seconds=Number(a);else if(s.match(/\d+ \d+ 0\/\d+ 1\/1 \* \? \*/))this.activeTab="hourly",this.state.hourly.hours=Number(i.substring(2)),this.state.hourly.minutes=Number(o),this.state.hourly.seconds=Number(a);else if(s.match(/\d+ \d+ \d+ 1\/\d+ \* \? \*/)){this.activeTab="daily",this.state.daily.subTab="everyDays",this.state.daily.everyDays.days=Number(r.substring(2));var h=Number(i);this.state.daily.everyDays.hours=this.getAmPmHour(h),this.state.daily.everyDays.hourType=this.getHourType(h),this.state.daily.everyDays.minutes=Number(o),this.state.daily.everyDays.seconds=Number(a)}else if(s.match(/\d+ \d+ \d+ \? \* MON-FRI \*/)){this.activeTab="daily",this.state.daily.subTab="everyWeekDay";h=Number(i);this.state.daily.everyWeekDay.hours=this.getAmPmHour(h),this.state.daily.everyWeekDay.hourType=this.getHourType(h),this.state.daily.everyWeekDay.minutes=Number(o),this.state.daily.everyWeekDay.seconds=Number(a)}else if(s.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}),c.split(",").forEach(function(e){return t.state.weekly[e]=!0});h=Number(i);this.state.weekly.hours=this.getAmPmHour(h),this.state.weekly.hourType=this.getHourType(h),this.state.weekly.minutes=Number(o),this.state.weekly.seconds=Number(a)}else if(s.match(/\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ \? \*/)){this.activeTab="monthly",this.state.monthly.subTab="specificDay",-1!==r.indexOf("W")?(this.state.monthly.specificDay.day=r.charAt(0),this.state.monthly.runOnWeekday=!0):this.state.monthly.specificDay.day=r,this.state.monthly.specificDay.months=Number(l.substring(2));h=Number(i);this.state.monthly.specificDay.hours=this.getAmPmHour(h),this.state.monthly.specificDay.hourType=this.getHourType(h),this.state.monthly.specificDay.minutes=Number(o),this.state.monthly.specificDay.seconds=Number(a)}else if(s.match(/\d+ \d+ \d+ \? \d+\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)(()|L) \*/)){var d=c.substr(0,3),y=c.substr(3);if(this.activeTab="monthly",this.state.monthly.subTab="specificWeekDay",this.state.monthly.specificWeekDay.monthWeek=y,this.state.monthly.specificWeekDay.day=d,-1!==l.indexOf("/")){var u=b(l.split("/").map(Number),2),p=u[0],m=u[1];this.state.monthly.specificWeekDay.months=m,this.state.monthly.specificWeekDay.startMonth=p}h=Number(i);this.state.monthly.specificWeekDay.hours=this.getAmPmHour(h),this.state.monthly.specificWeekDay.hourType=this.getHourType(h),this.state.monthly.specificWeekDay.minutes=Number(o),this.state.monthly.specificWeekDay.seconds=Number(a)}else if(s.match(/\d+ \d+ \d+ (\d+|L|LW|1W) \d+ \? \*/)){this.activeTab="yearly",this.state.yearly.subTab="specificMonthDay",this.state.yearly.specificMonthDay.month=Number(l),-1!==r.indexOf("W")?(this.state.yearly.specificMonthDay.day=r.charAt(0),this.state.yearly.runOnWeekday=!0):this.state.yearly.specificMonthDay.day=r;h=Number(i);this.state.yearly.specificMonthDay.hours=this.getAmPmHour(h),this.state.yearly.specificMonthDay.hourType=this.getHourType(h),this.state.yearly.specificMonthDay.minutes=Number(o),this.state.yearly.specificMonthDay.seconds=Number(a)}else if(s.match(/\d+ \d+ \d+ \? \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)(()|L) \*/)){d=c.substr(0,3),y=c.substr(3);this.activeTab="yearly",this.state.yearly.subTab="specificMonthWeek",this.state.yearly.specificMonthWeek.monthWeek=y,this.state.yearly.specificMonthWeek.day=d,this.state.yearly.specificMonthWeek.month=Number(l);h=Number(i);this.state.yearly.specificMonthWeek.hours=this.getAmPmHour(h),this.state.yearly.specificMonthWeek.hourType=this.getHourType(h),this.state.yearly.specificMonthWeek.minutes=Number(o),this.state.yearly.specificMonthWeek.seconds=Number(a)}else this.activeTab="advanced",this.state.advanced.expression=e}},e.prototype.validate=function(e){if(this.state.validation.isValid=!1,this.state.validation.errorMessage="",e){var t=e.split(" "),s=5;this.options.removeSeconds||s++,this.options.removeYears||s++,t.length===s?this.state.validation.isValid=!0:this.state.validation.errorMessage="Invalid cron expression, there must be "+s+" segments"}else this.state.validation.errorMessage="Cron expression cannot be null"},e.prototype.getDefaultAdvancedCronExpression=function(){return this.options.removeSeconds&&!this.options.removeYears?"15 10 L-2 * ? 2019":!this.options.removeSeconds&&this.options.removeYears?"0 15 10 L-2 * ?":this.options.removeSeconds&&this.options.removeYears?"15 10 L-2 * ?":"0 15 10 L-2 * ? 2019"},e.prototype.getDefaultState=function(){var e=b(this.options.defaultTime.split(":").map(Number),3),t=e[0],s=e[1],n=e[2];return{minutes:{minutes:1,seconds:0},hourly:{hours:1,minutes:0,seconds:0},daily:{subTab:"everyDays",everyDays:{days:1,hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)},everyWeekDay:{hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)}},weekly:{MON:!0,TUE:!1,WED:!1,THU:!1,FRI:!1,SAT:!1,SUN:!1,hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)},monthly:{subTab:"specificDay",runOnWeekday:!1,specificDay:{day:"1",months:1,hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)},specificWeekDay:{monthWeek:"#1",day:"MON",startMonth:1,months:1,hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)}},yearly:{subTab:"specificMonthDay",runOnWeekday:!1,specificMonthDay:{month:1,day:"1",hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)},specificMonthWeek:{monthWeek:"#1",day:"MON",month:1,hours:this.getAmPmHour(t),minutes:s,seconds:n,hourType:this.getHourType(t)}},advanced:{expression:this.getDefaultAdvancedCronExpression()},validation:{isValid:!0,errorMessage:""}}},e.prototype.getOrdinalSuffix=function(e){if(1<e.length&&"1"===e.charAt(e.length-2))return"th";switch(e.charAt(e.length-1)){case"1":return"st";case"2":return"nd";case"3":return"rd";default:return"th"}},e.prototype.getSelectOptions=function(){return{months:r.getRange(1,12),monthWeeks:["#1","#2","#3","#4","#5","L"],days:["MON","TUE","WED","THU","FRI","SAT","SUN"],minutes:r.getRange(0,59),fullMinutes:r.getRange(0,59),seconds:r.getRange(0,59),hours:r.getRange(1,23),monthDays:r.getRange(1,31),monthDaysWithLasts:function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(b(arguments[t]));return e}(r.getRange(1,31).map(String),["L"]),hourTypes:["AM","PM"]}},e.decorators=[{type:t.Component,args:[{selector:"cron-editor",template:'\x3c!-- Tabs --\x3e\r\n<ul class="nav nav-tabs tab-nav" role="tablist">\r\n <li [ngClass]="{\'active\': activeTab === \'minutes\'}" *ngIf="!options.hideMinutesTab">\r\n <a aria-controls="minutes" role="tab" data-toggle="tab" (click)="setActiveTab(\'minutes\')">\r\n Minutes\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideHourlyTab" [ngClass]="{\'active\': activeTab === \'hourly\'}">\r\n <a aria-controls="hourly" role="tab" data-toggle="tab" (click)="setActiveTab(\'hourly\')">\r\n Hourly\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideDailyTab" [ngClass]="{\'active\': activeTab === \'daily\'}">\r\n <a aria-controls="daily" role="tab" data-toggle="tab" (click)="setActiveTab(\'daily\')">\r\n Daily\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideWeeklyTab" [ngClass]="{\'active\': activeTab === \'weekly\'}">\r\n <a aria-controls="weekly" role="tab" data-toggle="tab" (click)="setActiveTab(\'weekly\')">\r\n Weekly\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideMonthlyTab" [ngClass]="{\'active\': activeTab === \'monthly\'}">\r\n <a aria-controls="monthly" role="tab" data-toggle="tab" (click)="setActiveTab(\'monthly\')">\r\n Monthly\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideYearlyTab" [ngClass]="{\'active\': activeTab === \'yearly\'}">\r\n <a aria-controls="yearly" role="tab" data-toggle="tab" (click)="setActiveTab(\'yearly\')">\r\n Yearly\r\n </a>\r\n </li>\r\n\r\n <li role="presentation" *ngIf="!options.hideAdvancedTab" [ngClass]="{\'active\': activeTab === \'advanced\'}">\r\n <a aria-controls="advanced" role="tab" data-toggle="tab" (click)="setActiveTab(\'advanced\')">\r\n Advanced\r\n </a>\r\n </li>\r\n</ul>\r\n\r\n\x3c!-- Tab content --\x3e\r\n<div class="cron-editor-container">\r\n <div class="row">\r\n <div class="col-xs-12">\r\n <div class="tab-content">\r\n \x3c!-- Minutes--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideMinutesTab" [ngClass]="{\'active\': activeTab === \'minutes\'}">\r\n <div class="well well-small">\r\n Every\r\n <select class="minutes" [disabled]="disabled || activeTab !== \'minutes\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.minutes.minutes" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let minute of selectOptions.minutes" [ngValue]="minute">\r\n {{minute}}\r\n </option>\r\n </select> minute(s)\r\n <span *ngIf="!options.hideSeconds">on second</span>\r\n <select class="seconds" *ngIf="!options.hideSeconds" [disabled]="disabled || activeTab !== \'minutes\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.minutes.seconds" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let second of selectOptions.seconds" [ngValue]="second">\r\n {{second}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n \x3c!-- Hourly--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideHourlyTab" [ngClass]="{\'active\': activeTab === \'hourly\'}">\r\n <div class="well well-small">\r\n Every\r\n <select class="hours" [disabled]="disabled || activeTab !== \'hourly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.hourly.hours" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let hour of selectOptions.hours" [ngValue]="hour">\r\n {{hour}}\r\n </option>\r\n </select> hour(s) on minute\r\n <select class="minutes" [disabled]="disabled || activeTab !== \'hourly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.hourly.minutes" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let minute of selectOptions.fullMinutes" [ngValue]="minute">\r\n {{minute}}\r\n </option>\r\n </select>\r\n <span *ngIf="!options.hideSeconds">and second</span>\r\n <select class="seconds" *ngIf="!options.hideSeconds" [disabled]="disabled || activeTab !== \'hourly\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.hourly.seconds" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let second of selectOptions.seconds" [ngValue]="second">\r\n {{second}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n \x3c!-- Daily--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideDailyTab" [ngClass]="{\'active\': activeTab === \'daily\'}">\r\n <div class="well well-small">\r\n <input type="radio" name="daily-radio" value="everyDays" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.daily.subTab" value="everyDays" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.daily.subTab" [ngClass]="state.formRadioClass" checked="checked">\r\n Every\r\n <select class="days" [disabled]="disabled || activeTab !== \'daily\' || state.daily.subTab !== \'everyDays\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.daily.everyDays.days" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let monthDay of selectOptions.monthDays" [ngValue]="monthDay">\r\n {{monthDay}}\r\n </option>\r\n </select> day(s) at\r\n\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'daily\' || state.daily.subTab !== \'everyDays\'"\r\n (change)="regenerateCron()" [(time)]="state.daily.everyDays" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker>\r\n </div>\r\n\r\n <div class="well well-small">\r\n <input type="radio" name="daily-radio" value="everyWeekDay" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.daily.subTab" [ngClass]="state.formRadioClass"> Every working day at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'daily\' || state.daily.subTab !== \'everyWeekDay\'"\r\n (change)="regenerateCron()" [(time)]="state.daily.everyWeekDay" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker>\r\n </div>\r\n </div>\r\n\r\n \x3c!-- Weekly--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideWeeklyTab" [ngClass]="{\'active\': activeTab === \'weekly\'}">\r\n <div class="well well-small">\r\n <div class="row">\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.MON" [ngClass]="options.formCheckboxClass"> Monday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.TUE" [ngClass]="options.formCheckboxClass"> Tuesday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.WED" [ngClass]="options.formCheckboxClass"> Wednesday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.THU" [ngClass]="options.formCheckboxClass"> Thursday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.FRI" [ngClass]="options.formCheckboxClass"> Friday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.SAT" [ngClass]="options.formCheckboxClass"> Saturday</label>\r\n </div>\r\n <div class="col-sm-6">\r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(ngModel)]="state.weekly.SUN" [ngClass]="options.formCheckboxClass"> Sunday</label>\r\n </div>\r\n </div>\r\n <div class="row">\r\n <div class="col-sm-6">\r\n at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'weekly\'" (change)="regenerateCron()"\r\n [(time)]="state.weekly" [selectClass]="options.formSelectClass" [use24HourTime]="options.use24HourTime"\r\n [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n \x3c!-- Monthly--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideMonthlyTab" [ngClass]="{\'active\': activeTab === \'monthly\'}">\r\n <div class="well well-small">\r\n <input type="radio" name="monthly-radio" value="specificDay" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.monthly.subTab" [ngClass]="state.formRadioClass"> On the\r\n <select class="month-days" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificDay.day" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let monthDaysWithLast of selectOptions.monthDaysWithLasts" [ngValue]="monthDaysWithLast">\r\n {{monthDayDisplay(monthDaysWithLast)}}\r\n </option>\r\n </select> of every\r\n <select class="months-small" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificDay.months" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let month of selectOptions.months" [ngValue]="month">\r\n {{month}}\r\n </option>\r\n </select> month(s) at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificDay\'"\r\n (change)="regenerateCron()" [(time)]="state.monthly.specificDay" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker> \r\n <label class="advanced-cron-editor-label"><input type="checkbox" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificDay\'" \r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.runOnWeekday" [ngClass]="options.formCheckboxClass"> during the nearest weekday</label>\r\n </div>\r\n <div class="well well-small">\r\n <input type="radio" name="monthly-radio" value="specificWeekDay" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.monthly.subTab" [ngClass]="state.formRadioClass">\r\n On the\r\n <select class="day-order-in-month" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificWeekDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificWeekDay.monthWeek" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let monthWeek of selectOptions.monthWeeks" [ngValue]="monthWeek">\r\n {{monthWeekDisplay(monthWeek)}}\r\n </option>\r\n </select>\r\n <select class="week-days" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificWeekDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificWeekDay.day" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let day of selectOptions.days" [ngValue]="day">\r\n {{dayDisplay(day)}}\r\n </option>\r\n </select> of every\r\n <select class="months-small" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificWeekDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificWeekDay.months" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let month of selectOptions.months" [ngValue]="month">\r\n {{month}}\r\n </option>\r\n </select> month(s) starting in\r\n <select class="months" [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificWeekDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.monthly.specificWeekDay.startMonth" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let month of selectOptions.months" [ngValue]="month">\r\n {{monthDisplay(month)}}\r\n </option>\r\n </select>\r\n \r\n at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'monthly\' || state.monthly.subTab !== \'specificWeekDay\'"\r\n (change)="regenerateCron()" [(time)]="state.monthly.specificWeekDay" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker>\r\n </div>\r\n </div>\r\n\r\n \x3c!-- Yearly--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideYearlyTab" [ngClass]="{\'active\': activeTab === \'yearly\'}">\r\n <div class="well well-small">\r\n <input type="radio" name="yearly-radio" value="specificMonthDay" [disabled]="disabled" (change)="regenerateCron()"\r\n [(ngModel)]="state.yearly.subTab" [ngClass]="state.formRadioClass">\r\n Every\r\n <select class="months" [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.specificMonthDay.month" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let month of selectOptions.months" [ngValue]="month">\r\n {{monthDisplay(month)}}\r\n </option>\r\n </select> on the\r\n <select class="month-days" [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthDay\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.specificMonthDay.day" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let monthDaysWithLast of selectOptions.monthDaysWithLasts" [ngValue]="monthDaysWithLast">\r\n {{monthDayDisplay(monthDaysWithLast)}}\r\n </option>\r\n </select> at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthDay\'"\r\n (change)="regenerateCron()" [(time)]="state.yearly.specificMonthDay" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker> \r\n <label class="advanced-cron-editor-label"><input type="checkbox" (change)="regenerateCron()"\r\n [(ngModel)]="state.yearly.runOnWeekday" [ngClass]="options.formCheckboxClass"> during the nearest weekday</label>\r\n </div>\r\n <div class="well well-small">\r\n <input type="radio" name="yearly-radio" value="specificMonthWeek" [disabled]="disabled"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.subTab" [ngClass]="state.formRadioClass">\r\n On the\r\n <select class="day-order-in-month" [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthWeek\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.specificMonthWeek.monthWeek"\r\n [ngClass]="options.formSelectClass">\r\n <option *ngFor="let monthWeek of selectOptions.monthWeeks" [ngValue]="monthWeek">\r\n {{monthWeekDisplay(monthWeek)}}\r\n </option>\r\n </select>\r\n <select class="week-days" [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthWeek\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.specificMonthWeek.day" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let day of selectOptions.days" [ngValue]="day">\r\n {{dayDisplay(day)}}\r\n </option>\r\n </select> of\r\n <select class="months" [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthWeek\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.yearly.specificMonthWeek.month" [ngClass]="options.formSelectClass">\r\n <option *ngFor="let month of selectOptions.months" [ngValue]="month">\r\n {{monthDisplay(month)}}\r\n </option>\r\n </select> at\r\n <cron-time-picker [disabled]="disabled || activeTab !== \'yearly\' || state.yearly.subTab !== \'specificMonthWeek\'"\r\n (change)="regenerateCron()" [(time)]="state.yearly.specificMonthWeek" [selectClass]="options.formSelectClass"\r\n [use24HourTime]="options.use24HourTime" [hideSeconds]="options.hideSeconds">\r\n </cron-time-picker>\r\n </div>\r\n </div>\r\n\r\n \x3c!-- Advanced--\x3e\r\n <div class="tab-pane" *ngIf="!options.hideAdvancedTab" [ngClass]="{\'active\': activeTab === \'advanced\'}">\r\n Cron Expression\r\n <input type="text" class="advanced-cron-editor-input" ng-disabled="disabled || activeTab !== \'advanced\'"\r\n (change)="regenerateCron()" [(ngModel)]="state.advanced.expression" [ngClass]="options.formInputClass">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="row" *ngIf="!state.validation.isValid">\r\n <code>{{state.validation.errorMessage}}</code>\r\n </div>\r\n</div>',styles:[".cron-editor-container{margin-top:10px}.cron-editor-container .cron-editor-radio{width:20px;display:inline-block}.cron-editor-container .cron-editor-checkbox,.cron-editor-container .cron-editor-input,.cron-editor-container .cron-editor-select{display:inline-block}.cron-editor-container .well-time-wrapper{padding-left:20px}.cron-editor-container .inline-block{display:inline-block}.cron-editor-container .days,.cron-editor-container .hours,.cron-editor-container .minutes,.cron-editor-container .seconds{width:70px}.cron-editor-container .months{width:120px}.cron-editor-container .month-days{width:130px}.cron-editor-container .months-small{width:60px}.cron-editor-container .day-order-in-month{width:95px}.cron-editor-container .week-days{width:120px}.cron-editor-container .advanced-cron-editor-input{width:200px}.cron-editor-container .hour-types{width:70px}.cron-editor-container .advanced-cron-editor-label{font-weight:200}.nav-tabs li a{cursor:pointer}.form-control{height:auto}"]}]}],e.propDecorators={disabled:[{type:t.Input}],options:[{type:t.Input}],cron:[{type:t.Input}],cronChange:[{type:t.Output}]},e}(),c=function(){function e(){this.change=new t.EventEmitter}return e.prototype.ngOnInit=function(){this.hours=this.use24HourTime?r.getRange(0,23):r.getRange(0,12),this.minutes=r.getRange(0,59),this.seconds=r.getRange(0,59),this.hourTypes=["AM","PM"]},e.decorators=[{type:t.Component,args:[{selector:"cron-time-picker",template:'\x3c!-- hour --\x3e\r\n<select class="timeFormControl" (change)="change.emit()" [(ngModel)]="time.hours" [disabled]="disabled" [ngClass]="selectClass">\r\n <option *ngFor="let hour of hours" [ngValue]="hour">{{hour}}</option>\r\n</select>\r\n\r\n\x3c!-- minute --\x3e\r\n<select class="timeFormControl" (change)="change.emit()" [(ngModel)]="time.minutes" [disabled]="disabled" [ngClass]="selectClass">\r\n <option *ngFor="let minute of minutes" [ngValue]="minute">{{minute}}</option>\r\n</select>\r\n\r\n\x3c!-- second --\x3e\r\n<select class="timeFormControl" (change)="change.emit()" [(ngModel)]="time.seconds" [disabled]="disabled" *ngIf="!hideSeconds"\r\n [ngClass]="selectClass">\r\n <option *ngFor="let second of seconds" [ngValue]="second">{{second}}</option>\r\n</select>\r\n\r\n\x3c!-- am/pm --\x3e\r\n<select class="timeFormControl" (change)="change.emit()" [(ngModel)]="time.hourTypes" [disabled]="disabled" *ngIf="!use24HourTime"\r\n [ngClass]="selectClass">\r\n <option *ngFor="let hourType of hourTypes" [ngValue]="hourType">{{hourType}}</option>\r\n</select>',styles:[".timeFormControl{width:70px;display:inline}"]}]}],e.propDecorators={change:[{type:t.Output}],disabled:[{type:t.Input}],time:[{type:t.Input}],selectClass:[{type:t.Input}],use24HourTime:[{type:t.Input}],hideSeconds:[{type:t.Input}]},e}(),h=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[l,c],imports:[n.CommonModule,s.FormsModule],exports:[l]}]}],e}();e.CronEditorComponent=l,e.CronEditorModule=h,e.ɵa=c,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=cron-editor.umd.min.js.map