$.fn.croneditor = function(opts) { var el = this; // Write the HTML template to the document $(el).html(tmpl); var cronArr = ["*", "*", "*", "*", "*", "*"]; if (typeof opts.value === "string") { cronArr = opts.value.split(' '); } $( ".tabs" ).tabs({ activate: function( event, ui ) { switch ($(ui.newTab).attr('id')) { // Seconds case 'button-second-every': cronArr[0] = "*"; break; case 'button-second-n': cronArr[0] = "*/" + $( "#tabs-second .slider" ).slider("value"); break; // Minutes case 'button-minute-every': cronArr[1] = "*"; break; case 'button-minute-n': cronArr[1] = "*/" + $( "#tabs-minute .slider" ).slider("value"); break; case 'button-minute-each': cronArr[1] = "*"; // TODO: toggle off selected minutes on load //$('.tabs-minute-format input[checked="checked"]').click() $('.tabs-minute-format').html(''); drawEachMinutes(); break; // Hours case 'button-hour-every': cronArr[2] = "*"; break; case 'button-hour-n': cronArr[2] = "*/" + $( "#tabs-hour .slider" ).slider("value"); break; case 'button-hour-each': cronArr[2] = "*"; $('.tabs-hour-format').html(''); drawEachHours(); break; // Days case 'button-day-every': cronArr[3] = "*"; break; case 'button-day-each': cronArr[3] = "*"; $('.tabs-day-format').html(''); drawEachDays(); break; // Months case 'button-month-every': cronArr[4] = "*"; break; case 'button-month-each': cronArr[4] = "*"; $('.tabs-month-format').html(''); drawEachMonths(); break; // Weeks case 'button-week-every': cronArr[5] = "*"; break; case 'button-week-each': cronArr[5] = "*"; $('.tabs-week-format').html(''); drawEachWeek(); break; } drawCron(); } }); function drawCron () { var newCron = cronArr.join(' '); $('#cronString').val(newCron); // TODO: add back next estimated cron time /* var last = new Date(); $('.next').html(''); var job = new cron.CronTime(newCron); var next = job._getNextDateFrom(new Date()); $('.next').append('' + dateformat(next, "ddd mmm dd yyyy HH:mm:ss") + '
'); */ /* setInterval(function(){ drawCron(); }, 500); */ /* $('#cronString').keyup(function(){ cronArr = $('#cronString').val().split(' '); console.log('updated', cronArr) }); */ } $('#clear').click(function(){ $('#cronString').val('* * * * * *'); cronArr = ["*","*","*","*","*", "*"]; }); $( "#tabs-second .slider" ).slider({ min: 1, max: 59, slide: function( event, ui ) { cronArr[0] = "*/" + ui.value; $('#tabs-second-n .preview').html('Every ' + ui.value + ' seconds'); drawCron(); } }); $( "#tabs-minute .slider" ).slider({ min: 1, max: 59, slide: function( event, ui ) { cronArr[1] = "*/" + ui.value; $('#tabs-minute-n .preview').html('Every ' + ui.value + ' minutes'); drawCron(); } }); $( "#tabs-hour .slider" ).slider({ min: 1, max: 23, slide: function( event, ui ) { cronArr[2] = "*/" + ui.value; $('#tabs-hour-n .preview').html('Every ' + ui.value + ' Hours'); drawCron(); } }); // TOOD: All draw* functions can be combined into a few smaller methods function drawEachMinutes () { // minutes for (var i = 0; i < 60; i++) { var padded = i; if(padded.toString().length === 1) { padded = "0" + padded; } $('.tabs-minute-format').append(''); if (i !== 0 && (i+1) % 10 === 0) { $('.tabs-minute-format').append('
'); } } $('.tabs-minute-format input').button(); $('.tabs-minute-format').buttonset(); $('.tabs-minute-format input[type="checkbox"]').click(function(){ var newItem = $(this).attr('id').replace('minute-check', ''); if(cronArr[1] === "*") { cronArr[1] = $(this).attr('id').replace('minute-check', ''); } else { // if value already in list, toggle it off var list = cronArr[1].split(','); if (list.indexOf(newItem) !== -1) { list.splice(list.indexOf(newItem), 1); cronArr[1] = list.join(','); } else { // else toggle it on cronArr[1] = cronArr[1] + "," + newItem; } if(cronArr[1] === "") { cronArr[1] = "*"; } } drawCron(); }); } function drawEachHours () { // hours for (var i = 0; i < 24; i++) { var padded = i; if(padded.toString().length === 1) { padded = "0" + padded; } $('.tabs-hour-format').append(''); if (i !== 0 && (i+1) % 12 === 0) { $('.tabs-hour-format').append('
'); } } $('.tabs-hour-format input').button(); $('.tabs-hour-format').buttonset(); $('.tabs-hour-format input[type="checkbox"]').click(function(){ var newItem = $(this).attr('id').replace('hour-check', ''); if(cronArr[2] === "*") { cronArr[2] = $(this).attr('id').replace('hour-check', ''); } else { // if value already in list, toggle it off var list = cronArr[2].split(','); if (list.indexOf(newItem) !== -1) { list.splice(list.indexOf(newItem), 1); cronArr[2] = list.join(','); } else { // else toggle it on cronArr[2] = cronArr[2] + "," + newItem; } if(cronArr[2] === "") { cronArr[2] = "*"; } } drawCron(); }); }; function drawEachDays () { // days for (var i = 1; i < 32; i++) { var padded = i; if(padded.toString().length === 1) { padded = "0" + padded; } $('.tabs-day-format').append(''); if (i !== 0 && (i) % 7 === 0) { $('.tabs-day-format').append('
'); } } $('.tabs-day-format input').button(); $('.tabs-day-format').buttonset(); $('.tabs-day-format input[type="checkbox"]').click(function(){ var newItem = $(this).attr('id').replace('day-check', ''); if(cronArr[3] === "*") { cronArr[3] = $(this).attr('id').replace('day-check', ''); } else { // if value already in list, toggle it off var list = cronArr[3].split(','); if (list.indexOf(newItem) !== -1) { list.splice(list.indexOf(newItem), 1); cronArr[3] = list.join(','); } else { // else toggle it on cronArr[3] = cronArr[3] + "," + newItem; } if(cronArr[3] === "") { cronArr[3] = "*"; } } drawCron(); }); }; function drawEachMonths () { // months var months = [null, 'Jan', 'Feb', 'March', 'April', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']; for (var i = 1; i < 13; i++) { var padded = i; if(padded.toString().length === 1) { //padded = "0" + padded; } $('.tabs-month-format').append(''); } $('.tabs-month-format input').button(); $('.tabs-month-format').buttonset(); $('.tabs-month-format input[type="checkbox"]').click(function(){ var newItem = $(this).attr('id').replace('month-check', ''); if(cronArr[4] === "*") { cronArr[4] = $(this).attr('id').replace('month-check', ''); } else { // if value already in list, toggle it off var list = cronArr[4].split(','); if (list.indexOf(newItem) !== -1) { list.splice(list.indexOf(newItem), 1); cronArr[4] = list.join(','); } else { // else toggle it on cronArr[4] = cronArr[4] + "," + newItem; } if(cronArr[4] === "") { cronArr[4] = "*"; } } drawCron(); }); }; function drawEachWeek () { // weeks var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; for (var i = 0; i < 7; i++) { var padded = i; if(padded.toString().length === 1) { //padded = "0" + padded; } $('.tabs-week-format').append(''); } $('.tabs-week-format input').button(); $('.tabs-week-format').buttonset(); $('.tabs-week-format input[type="checkbox"]').click(function(){ var newItem = $(this).attr('id').replace('week-check', ''); if(cronArr[5] === "*") { cronArr[5] = $(this).attr('id').replace('week-check', ''); } else { // if value already in list, toggle it off var list = cronArr[5].split(','); if (list.indexOf(newItem) !== -1) { list.splice(list.indexOf(newItem), 1); cronArr[5] = list.join(','); } else { // else toggle it on cronArr[5] = cronArr[5] + "," + newItem; } if(cronArr[5] === "") { cronArr[5] = "*"; } } drawCron(); }); }; // TODO: Refactor these methods into smaller methods drawEachMinutes(); drawEachHours(); drawEachDays(); drawEachMonths(); drawCron(); }; // HTML Template for plugin var tmpl = '\
\ \
\ Note: If your Cron manager does not support seconds you will need to ignore the first parameter of the generated Cron

\ \ \ \
\ \
\
\ \
\
*
\
Every second.
\
\
\
Every 1 seconds
\
\
\
\
\
\
\ \
\
*
\
Every minute.
\
\
\
Every 1 minutes
\
\
\
\
Each selected minute

\
\
\
\
\
\
\ \
\
*
\
Every hour
\
\
\
Every 1 hours
\
\
\
\
Each selected hour

\
\
\
\
\
\
\ \
\
*
\
Every Day
\
\
\
Each selected Day

\
\
\
\
\
\
\ \
\
*
\
Every month
\
\
\
Each selected month

\
\
\
\
\
\
\ \
\
*
\
Every Day
\
\
\
Each selected Day

\
\
\
\
\
';