/home/desid573/cf.desidrivers.com.au/google/api/cal
NameSizeModeActions
availability-calendar.css48270644editdlrm
availability-calendar.js66820644editdlrm
availability-calendar1.css19450644editdlrm
index.html12240644editdlrm
README.md4120644editdlrm
Simple-Responsive-Availability-Calendar-Plugin-For-jQuery.zip47520644editdlrm
Edit: /home/desid573/cf.desidrivers.com.au/google/api/cal/availability-calendar.js (6682B)
(function ($) { var weekdays = ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']; var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; function AvailabilityCalendar(container, bookedDates) { this.date = new Date(); this.date.setDate(1); this.container = container; this.bookedDates = bookedDates; this.createCalendar(); this.renderMonth(); } AvailabilityCalendar.prototype = { /** * Setup methods */ __createToolbar: function () { var $toolbar = $('
').appendTo(this.container); $toolbar.addClass('availability-calendar-toolbar'); this.$monthLabel = $('').appendTo($toolbar); var $inputContainer = $('').appendTo($toolbar); $inputContainer.append(''); $inputContainer.append(''); $inputContainer.append(''); var $inputs = $inputContainer.children('input'); var self = this; $inputs.eq(0).on('click', function () { self.date = new Date(); self.date.setDate(1); self.renderMonth(); }); $inputs.eq(1).on('click', function () { self.date.setMonth(self.date.getMonth() - 1); self.renderMonth(); }); $inputs.eq(2).on('click', function () { self.date.setMonth(self.date.getMonth() + 1); self.renderMonth(); }); }, __createTable: function () { var $table = $('
').appendTo(this.container); $table.addClass('availability-calendar'); // Weekday headers var $tr = $('').appendTo($table); weekdays.forEach(function (day) { $('').html(day).appendTo($tr); }); // Day cells for (var i = 0; i < 6; ++i) { $tr = $('').appendTo($table); $tr.append(''); } this.$cells = $table.find('td'); }, createCalendar: function () { this.__createToolbar(); this.__createTable(); }, /** * Month rendering methods */ __addPreviousMonthDays: function (date, cellIndexes, dates) { var firstWeekdayOfMonth = date.getDay() - 1; if (firstWeekdayOfMonth < 0) firstWeekdayOfMonth = 6; if (firstWeekdayOfMonth > 0) { date.setDate(0); var numDays = date.getDate(); for (var i = numDays - firstWeekdayOfMonth + 1; i <= numDays; ++i) { this.$cells.eq(dates.length).html(i).addClass('ex-month'); date.setDate(i); var dateInt = date.valueOf(); cellIndexes[dateInt] = dates.length; dates.push(dateInt); } } }, __addThisMonthDays: function (date, year, month, cellIndexes, dates) { date.setFullYear(year, month + 1, 0); // Need to reset year var numDays = date.getDate(); for (var i = 1; i <= numDays; ++i) { this.$cells.eq(dates.length).html(i); date.setDate(i); var dateInt = date.valueOf(); cellIndexes[dateInt] = dates.length; dates.push(dateInt); } }, __addNextMonthDays: function (date, month, cellIndexes, dates) { if (dates.length < 42) { date.setMonth(month + 1, 1); var remainingDays = 42 - dates.length; for (var i = 1; i <= remainingDays; ++i) { this.$cells.eq(dates.length).html(i).addClass('ex-month'); date.setDate(i); var dateInt = date.valueOf(); cellIndexes[dateInt] = dates.length; dates.push(dateInt); } } }, __addEvents: function (cellIndexes, dates) { var firstDate = dates[0]; var lastDate = dates[dates.length - 1]; var self = this; this.bookedDates.forEach(function (date) { console.log(date); var startIndex = cellIndexes[date.start]; var endIndex = cellIndexes[date.end]; if(date.start != date.end) { if (date.start <= lastDate && date.end >= firstDate) { if (startIndex !== undefined) { if(date.type == "JB") { self.$cells.eq(startIndex).addClass('unavailable').append('
'); } else { self.$cells.eq(startIndex).addClass('unavailable').append('
'); } ++startIndex; } else { startIndex = cellIndexes[firstDate]; } if (endIndex !== undefined) { if(date.type == "JB") { self.$cells.eq(endIndex).addClass('unavailable').append('
'); } else { self.$cells.eq(endIndex).addClass('unavailable').append('
'); } --endIndex; } else { endIndex = cellIndexes[lastDate]; } if(date.type == "JB") { self.$cells.slice(startIndex, endIndex + 1).addClass('unavailable').append('
'); } else { self.$cells.slice(startIndex, endIndex + 1).addClass('unavailable').append('
'); } } } else { if(date.type == "JB") { self.$cells.eq(startIndex).addClass('standAlone').append('
') } else { self.$cells.eq(startIndex).addClass('standAlone').append('
'); } } }); }, renderMonth: function () { var cellIndexes = {}; var dates = []; var year = this.date.getFullYear(); var month = this.date.getMonth(); var date = new Date(year, month, 1); this.$monthLabel.html(months[month] + ' ' + year); this.$cells.removeClass('ex-month'); this.$cells.filter('.unavailable').removeClass('unavailable').children().remove(); this.__addPreviousMonthDays(date, cellIndexes, dates); this.__addThisMonthDays(date, year, month, cellIndexes, dates); this.__addNextMonthDays(date, month, cellIndexes, dates); this.__addEvents(cellIndexes, dates); } }; $.fn.availabilityCalendar = function (bookedDates) { var dates = []; //console.log(bookedDates); bookedDates.forEach(function (date) { // console.log(date); var start = new Date(date.start); var end = new Date(date.end); var type = date.type; start.setHours(0, 0, 0, 0); end.setHours(0, 0, 0, 0); start = start.valueOf(); end = end.valueOf(); if (start <= end) { dates.push({ start: start, end: end, type: type }); } }); this.each(function () { new AvailabilityCalendar(this, dates); }); return this; }; })(jQuery);