/** * Zabuto Calendar * * Dependencies * - jQuery (2.0.3) * - Twitter Bootstrap (3.0.2) */ // https://github.com/beata/calendar/blob/d1eafb907d7a8462abe2c915a266fc730c3ac432/zabuto_calendar.js if (typeof jQuery == 'undefined') { throw new Error('jQuery is not loaded'); } /** * Create calendar * * @param options * @returns {*} */ $.fn.zabuto_calendar = function (options) { var opts = $.extend({}, $.fn.zabuto_calendar_defaults(), options); var languageSettings = $.fn.zabuto_calendar_language(opts.language); opts = $.extend({}, opts, languageSettings); var _ls_Param = opts._ls_Param; this.each(function () { var api = {}; var $calendarElement = $(this); $calendarElement.attr('id', "zabuto_calendar_" + Math.floor(Math.random() * 99999).toString(36)); $calendarElement.data('api', api); $calendarElement.data('initYear', opts.year); $calendarElement.data('initMonth', opts.month); $calendarElement.data('monthLabels', opts.month_labels); $calendarElement.data('weekStartsOn', opts.weekstartson); $calendarElement.data('navIcons', opts.nav_icon); $calendarElement.data('dowLabels', opts.dow_labels); $calendarElement.data('showToday', opts.today); $calendarElement.data('showDays', opts.show_days); $calendarElement.data('showPrevious', opts.show_previous); $calendarElement.data('showNext', opts.show_next); $calendarElement.data('cellBorder', opts.cell_border); $calendarElement.data('jsonData', opts.data); $calendarElement.data('ajaxSettings', opts.ajax); $calendarElement.data('legendList', opts.legend); $calendarElement.data('actionFunction', opts.action); $calendarElement.data('actionNavFunction', opts.action_nav); drawCalendar(); function drawCalendar() { var dateInitYear = parseInt($calendarElement.data('initYear')); var dateInitMonth = parseInt($calendarElement.data('initMonth')) - 1; var dateInitObj = new Date(dateInitYear, dateInitMonth, 1, 0, 0, 0, 0); $calendarElement.data('initDate', dateInitObj); var tableClassHtml = ($calendarElement.data('cellBorder') === true) ? ' table-bordered' : ''; $tableObj = $('
'); $tableObj = drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth()); $legendObj = drawLegend($calendarElement); var $containerHtml = $('
'); $containerHtml.append($tableObj); $containerHtml.append($legendObj); $calendarElement.append($containerHtml); var jsonData = $calendarElement.data('jsonData'); if (false !== jsonData) { checkEvents($calendarElement, dateInitObj.getFullYear(), dateInitObj.getMonth()); } } function drawTable($calendarElement, $tableObj, year, month) { var dateCurrObj = new Date(year, month, 1, 0, 0, 0, 0); $calendarElement.data('currDate', dateCurrObj); $tableObj.empty(); $tableObj = appendMonthHeader($calendarElement, $tableObj, year, month); $tableObj = appendDayOfWeekHeader($calendarElement, $tableObj); $tableObj = appendDaysOfMonth($calendarElement, $tableObj, year, month); checkEvents($calendarElement, year, month); return $tableObj; } function drawLegend($calendarElement) { var $legendObj = $('
'); var legend = $calendarElement.data('legendList'); if (typeof(legend) == 'object' && legend.length > 0) { $(legend).each(function (index, item) { if (typeof(item) == 'object') { if ('type' in item) { var itemLabel = ''; if ('label' in item) { itemLabel = item.label; } switch (item.type) { case 'text': if (itemLabel !== '') { var itemBadge = ''; if ('badge' in item) { if (typeof(item.classname) === 'undefined') { var badgeClassName = 'badge-event'; } else { var badgeClassName = item.classname; } itemBadge = '' + item.badge + ' '; } $legendObj.append('' + itemBadge + itemLabel + ''); } break; case 'block': if (itemLabel !== '') { itemLabel = '' + itemLabel + ''; } if (typeof(item.classname) === 'undefined') { var listClassName = 'event'; } else { var listClassName = 'event-styled ' + item.classname; } $legendObj.append('