Black Eagle Team Minishell
Path:
D:
/
inetpub
/
vhosts
/
supauldairy.com
/
httpdocs
/
MAIN
/
lib
/
[
Home
]
File: zabuto_calendar.js
/** * Zabuto Calendar * * Dependencies * - jQuery (2.0.3) * - Twitter Bootstrap (3.0.2) */ 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); this.each(function () { var $calendarElement = $(this); $calendarElement.attr('id', "zabuto_calendar_" + Math.floor(Math.random() * 99999).toString(36)); $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('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 = $('<table class="table' + tableClassHtml + '"></table>'); $tableObj = drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth()); $legendObj = drawLegend($calendarElement); var $containerHtml = $('<div class="zabuto_calendar" id="' + $calendarElement.attr('id') + '"></div>'); $containerHtml.append($tableObj); $containerHtml.append($legendObj); $calendarElement.append($containerHtml); } 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 = $('<div class="legend" id="' + $calendarElement.attr('id') + '_legend"></div>'); 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 = '<span class="badge ' + badgeClassName + '">' + item.badge + '</span> '; } $legendObj.append('<span class="legend-' + item.type + '">' + itemBadge + itemLabel + '</span>'); } break; case 'block': if (itemLabel !== '') { itemLabel = '<span>' + itemLabel + '</span>'; } if (typeof(item.classname) === 'undefined') { var listClassName = 'event'; } else { var listClassName = 'event-styled ' + item.classname; } $legendObj.append('<span class="legend-' + item.type + '"><ul class="legend"><li class="' + listClassName + '"></li></u>' + itemLabel + '</span>'); break; case 'list': if ('list' in item && typeof(item.list) == 'object' && item.list.length > 0) { var $legendUl = $('<ul class="legend"></u>'); $(item.list).each(function (listIndex, listClassName) { $legendUl.append('<li class="' + listClassName + '"></li>'); }); $legendObj.append($legendUl); } break; case 'spacer': $legendObj.append('<span class="legend-' + item.type + '"> </span>'); break; } } } }); } return $legendObj; } function appendMonthHeader($calendarElement, $tableObj, year, month) { var navIcons = $calendarElement.data('navIcons'); var $prevMonthNavIcon = $('<span><span class="fa fa-chevron-left text-transparent"></span></span>'); var $nextMonthNavIcon = $('<span><span class="fa fa-chevron-right text-transparent"></span></span>'); if (typeof(navIcons) === 'object') { if ('prev' in navIcons) { $prevMonthNavIcon.html(navIcons.prev); } if ('next' in navIcons) { $nextMonthNavIcon.html(navIcons.next); } } var prevIsValid = $calendarElement.data('showPrevious'); if (typeof(prevIsValid) === 'number' || prevIsValid === false) { prevIsValid = checkMonthLimit($calendarElement.data('showPrevious'), true); } var $prevMonthNav = $('<div class="calendar-month-navigation"></div>'); $prevMonthNav.attr('id', $calendarElement.attr('id') + '_nav-prev'); $prevMonthNav.data('navigation', 'prev'); if (prevIsValid !== false) { prevMonth = (month - 1); prevYear = year; if (prevMonth == -1) { prevYear = (prevYear - 1); prevMonth = 11; } $prevMonthNav.data('to', {year: prevYear, month: (prevMonth + 1)}); $prevMonthNav.append($prevMonthNavIcon); if (typeof($calendarElement.data('actionNavFunction')) === 'function') { $prevMonthNav.click($calendarElement.data('actionNavFunction')); } $prevMonthNav.click(function (e) { drawTable($calendarElement, $tableObj, prevYear, prevMonth); }); } var nextIsValid = $calendarElement.data('showNext'); if (typeof(nextIsValid) === 'number' || nextIsValid === false) { nextIsValid = checkMonthLimit($calendarElement.data('showNext'), false); } var $nextMonthNav = $('<div class="calendar-month-navigation"></div>'); $nextMonthNav.attr('id', $calendarElement.attr('id') + '_nav-next'); $nextMonthNav.data('navigation', 'next'); if (nextIsValid !== false) { nextMonth = (month + 1); nextYear = year; if (nextMonth == 12) { nextYear = (nextYear + 1); nextMonth = 0; } $nextMonthNav.data('to', {year: nextYear, month: (nextMonth + 1)}); $nextMonthNav.append($nextMonthNavIcon); if (typeof($calendarElement.data('actionNavFunction')) === 'function') { $nextMonthNav.click($calendarElement.data('actionNavFunction')); } $nextMonthNav.click(function (e) { drawTable($calendarElement, $tableObj, nextYear, nextMonth); }); } var monthLabels = $calendarElement.data('monthLabels'); var $prevMonthCell = $('<th></th>').append($prevMonthNav); var $nextMonthCell = $('<th></th>').append($nextMonthNav); var $currMonthLabel = $('<span>' + monthLabels[month] + ' ' + year + '</span>'); $currMonthLabel.dblclick(function () { var dateInitObj = $calendarElement.data('initDate'); drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth()); }); var $currMonthCell = $('<th colspan="5"></th>'); $currMonthCell.append($currMonthLabel); var $monthHeaderRow = $('<tr class="calendar-month-header"></tr>'); $monthHeaderRow.append($prevMonthCell, $currMonthCell, $nextMonthCell); $tableObj.append($monthHeaderRow); return $tableObj; } function appendDayOfWeekHeader($calendarElement, $tableObj) { if ($calendarElement.data('showDays') === true) { var weekStartsOn = $calendarElement.data('weekStartsOn'); var dowLabels = $calendarElement.data('dowLabels'); if (weekStartsOn === 0) { var dowFull = $.extend([], dowLabels); var sunArray = new Array(dowFull.pop()); dowLabels = sunArray.concat(dowFull); } var $dowHeaderRow = $('<tr class="calendar-dow-header"></tr>'); $(dowLabels).each(function (index, value) { $dowHeaderRow.append('<th>' + value + '</th>'); }); $tableObj.append($dowHeaderRow); } return $tableObj; } function appendDaysOfMonth($calendarElement, $tableObj, year, month) { var ajaxSettings = $calendarElement.data('ajaxSettings'); var weeksInMonth = calcWeeksInMonth(year, month); var lastDayinMonth = calcLastDayInMonth(year, month); var firstDow = calcDayOfWeek(year, month, 1); var lastDow = calcDayOfWeek(year, month, lastDayinMonth); var currDayOfMonth = 1; var weekStartsOn = $calendarElement.data('weekStartsOn'); if (weekStartsOn === 0) { if (lastDow == 6) { weeksInMonth++; } if (firstDow == 6 && (lastDow == 0 || lastDow == 1 || lastDow == 5)) { weeksInMonth--; } firstDow++; if (firstDow == 7) { firstDow = 0; } } for (var wk = 0; wk < weeksInMonth; wk++) { var $dowRow = $('<tr class="calendar-dow"></tr>'); for (var dow = 0; dow < 7; dow++) { if (dow < firstDow || currDayOfMonth > lastDayinMonth) { $dowRow.append('<td></td>'); } else { var dateId = $calendarElement.attr('id') + '_' + dateAsString(year, month, currDayOfMonth); var dayId = dateId + '_day'; var $dayElement = $('<div id="' + dayId + '" class="day" >' + currDayOfMonth + '</div>'); $dayElement.data('day', currDayOfMonth); if ($calendarElement.data('showToday') === true) { if (isToday(year, month, currDayOfMonth)) { $dayElement.html('<span class="badge badge-today">' + currDayOfMonth + '</span>'); } } var $dowElement = $('<td id="' + dateId + '"></td>'); $dowElement.append($dayElement); $dowElement.data('date', dateAsString(year, month, currDayOfMonth)); $dowElement.data('hasEvent', false); if (typeof($calendarElement.data('actionFunction')) === 'function') { $dowElement.addClass('dow-clickable'); $dowElement.click(function () { $calendarElement.data('selectedDate', $(this).data('date')); }); $dowElement.click($calendarElement.data('actionFunction')); } $dowRow.append($dowElement); currDayOfMonth++; } if (dow == 6) { firstDow = 0; } } $tableObj.append($dowRow); } return $tableObj; } /* ----- Modal functions ----- */ function createModal(id, title, body, footer) { var $modalHeaderButton = $('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'); var $modalHeaderTitle = $('<h4 class="modal-title" id="' + id + '_modal_title">' + title + '</h4>'); var $modalHeader = $('<div class="modal-header"></div>'); $modalHeader.append($modalHeaderButton); $modalHeader.append($modalHeaderTitle); var $modalBody = $('<div class="modal-body" id="' + id + '_modal_body">' + body + '</div>'); var $modalFooter = $('<div class="modal-footer" id="' + id + '_modal_footer"></div>'); if (typeof(footer) !== 'undefined') { var $modalFooterAddOn = $('<div>' + footer + '</div>'); $modalFooter.append($modalFooterAddOn); } var $modalContent = $('<div class="modal-content"></div>'); $modalContent.append($modalHeader); $modalContent.append($modalBody); $modalContent.append($modalFooter); var $modalDialog = $('<div class="modal-dialog"></div>'); $modalDialog.append($modalContent); var $modalFade = $('<div class="modal fade" id="' + id + '_modal" tabindex="-1" role="dialog" aria-labelledby="' + id + '_modal_title" aria-hidden="true"></div>'); $modalFade.append($modalDialog); $modalFade.data('dateId', id); $modalFade.attr("dateId", id); return $modalFade; } /* ----- Event functions ----- */ function checkEvents($calendarElement, year, month) { var ajaxSettings = $calendarElement.data('ajaxSettings'); $calendarElement.data('events', false); if (ajaxSettings === false) { return true; } if (typeof(ajaxSettings) != 'object' || typeof(ajaxSettings.url) == 'undefined') { alert('Invalid calendar event settings'); return false; } var data = { year: year, month: (month + 1)}; $.ajax({ type: 'GET', url: ajaxSettings.url, data: data, dataType: 'json' }).done(function (response) { var events = []; $.each(response, function (k, v) { events.push(response[k]); }); $calendarElement.data('events', events); drawEvents($calendarElement); }); } function drawEvents($calendarElement) { var ajaxSettings = $calendarElement.data('ajaxSettings'); var events = $calendarElement.data('events'); if (events !== false) { $(events).each(function (index, value) { var id = $calendarElement.attr('id') + '_' + value.date; var $dowElement = $('#' + id); var $dayElement = $('#' + id + '_day'); $dowElement.data('hasEvent', true); if (typeof(value.title) !== 'undefined') { $dowElement.attr('title', value.title); } if (typeof(value.classname) === 'undefined') { $dowElement.addClass('event'); } else { $dowElement.addClass('event-styled'); $dayElement.addClass(value.classname); } if (typeof(value.badge) !== 'undefined' && value.badge !== false) { var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge; var dayLabel = $dayElement.data('day'); $dayElement.html('<span class="badge badge-event' + badgeClass + '">' + dayLabel + '</span>'); } if (typeof(value.body) !== 'undefined') { if ('modal' in ajaxSettings && (ajaxSettings.modal === true)) { $dowElement.addClass('event-clickable'); var $modalElement = createModal(id, value.title, value.body, value.footer); $('body').append($modalElement); $('#' + id).click(function () { $('#' + id + '_modal').modal(); }); } } }); } } /* ----- Helper functions ----- */ function isToday(year, month, day) { var todayObj = new Date(); var dateObj = new Date(year, month, day); return (dateObj.toDateString() == todayObj.toDateString()); } function dateAsString(year, month, day) { d = (day < 10) ? '0' + day : day; m = month + 1; m = (m < 10) ? '0' + m : m; return year + '-' + m + '-' + d; } function calcDayOfWeek(year, month, day) { var dateObj = new Date(year, month, day, 0, 0, 0, 0); var dow = dateObj.getDay(); if (dow == 0) { dow = 6; } else { dow--; } return dow; } function calcLastDayInMonth(year, month) { var day = 28; while (checkValidDate(year, month + 1, day + 1)) { day++; } return day; } function calcWeeksInMonth(year, month) { var daysInMonth = calcLastDayInMonth(year, month); var firstDow = calcDayOfWeek(year, month, 1); var lastDow = calcDayOfWeek(year, month, daysInMonth); var days = daysInMonth; var correct = (firstDow - lastDow); if (correct > 0) { days += correct; } return Math.ceil(days / 7); } function checkValidDate(y, m, d) { return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate(); } function checkMonthLimit(count, invert) { if (count === false) { count = 0; } var d1 = $calendarElement.data('currDate'); var d2 = $calendarElement.data('initDate'); var months; months = (d2.getFullYear() - d1.getFullYear()) * 12; months -= d1.getMonth() + 1; months += d2.getMonth(); if (invert === true) { if (months < (parseInt(count) - 1)) { return true; } } else { if (months >= (0 - parseInt(count))) { return true; } } return false; } }); // each() return this; }; /** * Default settings * * @returns object * language: string, * year: integer, * month: integer, * show_previous: boolean|integer, * show_next: boolean|integer, * cell_border: boolean, * today: boolean, * show_days: boolean, * weekstartson: integer (0 = Sunday, 1 = Monday), * nav_icon: object: prev: string, next: string * ajax: object: url: string, modal: boolean, * legend: object array, [{type: string, label: string, classname: string}] * action: function * action_nav: function */ $.fn.zabuto_calendar_defaults = function () { var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; var settings = { language: false, year: year, month: month, show_previous: true, show_next: true, cell_border: false, today: false, show_days: true, weekstartson: 1, nav_icon: false, ajax: false, legend: false, action: false, action_nav: false }; return settings; }; /** * Language settings * * @param lang * @returns {{month_labels: Array, dow_labels: Array}} */ $.fn.zabuto_calendar_language = function (lang) { if (typeof(lang) == 'undefined' || lang === false) { lang = 'en'; } switch (lang.toLowerCase()) { case 'de': return { month_labels: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], dow_labels: ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] }; break; case 'en': return { month_labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], dow_labels: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] }; break; case 'es': return { month_labels: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], dow_labels: ["Lu", "Ma", "Mi", "Ju", "Vi", "Sá", "Do"] }; break; case 'fr': return { month_labels: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], dow_labels: ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"] }; break; case 'it': return { month_labels: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], dow_labels: ["Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"] }; break; case 'nl': return { month_labels: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], dow_labels: ["Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"] }; break; } };
©
2020 Black Eagle Team