forked from kylestetz/CLNDR
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclndr-1.0.6.min.js
More file actions
2 lines (2 loc) · 8.77 KB
/
clndr-1.0.6.min.js
File metadata and controls
2 lines (2 loc) · 8.77 KB
1
2
/*! clndr.min.js v1.0.6 2013-09-24 */
!function(a){function b(b,c){this.element=b,this.options=a.extend(!0,{},e,c),this.options.events.length&&(this.options.events=this.addMomentObjectToEvents(this.options.events)),this.month=this.options.startWithMonth?moment(this.options.startWithMonth):moment(),this._defaults=e,this._name=d,this.init()}var c="<div class='clndr-controls'><div class='clndr-control-button'><span class='clndr-previous-button'>previous</span></div><div class='month'><%= month %></div><div class='clndr-control-button rightalign'><span class='clndr-next-button'>next</span></div></div><table class='clndr-table' border='0' cellspacing='0' cellpadding='0'><thead><tr class='header-days'><% for(var i = 0; i < daysOfTheWeek.length; i++) { %><td class='header-day'><%= daysOfTheWeek[i] %></td><% } %></tr></thead><tbody><% for(var i = 0; i < numberOfRows; i++){ %><tr><% for(var j = 0; j < 7; j++){ %><% var d = j + i * 7; %><td class='<%= days[d].classes %>' id='<%= days[d].id %>'><div class='day-contents'><%= days[d].day %></div></td><% } %></tr><% } %></tbody></table>",d="clndr",e={template:c,weekOffset:0,startWithMonth:null,clickEvents:{click:null,nextMonth:null,previousMonth:null,today:null,onMonthChange:null},targets:{nextButton:"clndr-next-button",previousButton:"clndr-previous-button",todayButton:"clndr-today-button",day:"day",empty:"empty"},events:[],extras:null,dateParameter:"date",doneRendering:null,render:null,daysOfTheWeek:null,showAdjacentMonths:!0,adjacentDaysChangeMonth:!1};b.prototype.init=function(){if(this.daysOfTheWeek=this.options.daysOfTheWeek||[],!this.options.daysOfTheWeek){this.daysOfTheWeek=[];for(var b=0;7>b;b++)this.daysOfTheWeek.push(moment().weekday(b).format("dd").charAt(0))}if(this.options.weekOffset&&(this.daysOfTheWeek=this.shiftWeekdayLabels(this.options.weekOffset)),!a.isFunction(this.options.render)){if(this.options.render=null,"undefined"==typeof _)throw new Error("Underscore was not found. Please include underscore.js OR provide a custom render function.");this.compiledClndrTemplate=_.template(this.options.template)}a(this.element).html("<div class='clndr'></div>"),this.calendarContainer=a(".clndr",this.element),this.bindEvents(),this.render()},b.prototype.shiftWeekdayLabels=function(a){for(var b=this.daysOfTheWeek,c=0;a>c;c++)b.push(b.shift());return b},b.prototype.createDaysObject=function(a){daysArray=[];var b=a.startOf("month");if(this.eventsLastMonth=[],this.eventsThisMonth=[],this.eventsNextMonth=[],this.options.events.length&&(this.eventsThisMonth=this.options.events.filter(function(b){return b._clndrDateObject.format("YYYY-MM")==a.format("YYYY-MM")}),this.options.showAdjacentMonths)){var c=a.clone().subtract("months",1),d=a.clone().add("months",1);this.eventsLastMonth=this.options.events.filter(function(a){return a._clndrDateObject.format("YYYY-MM")==c.format("YYYY-MM")}),this.eventsNextMonth=this.options.events.filter(function(a){return a._clndrDateObject.format("YYYY-MM")==d.format("YYYY-MM")})}var e=b.day()-this.options.weekOffset;if(0>e&&(e+=7),this.options.showAdjacentMonths)for(var f=0;e>f;f++){var g=moment([a.year(),a.month(),f-e+1]);daysArray.push(this.createDayObject(g,this.eventsLastMonth))}else for(var f=0;e>f;f++)daysArray.push(this.calendarDay({classes:this.options.targets.empty+" last-month"}));for(var h=b.daysInMonth(),f=1;h>=f;f++){var g=moment([a.year(),a.month(),f]);daysArray.push(this.createDayObject(g,this.eventsThisMonth))}if(this.options.showAdjacentMonths)for(f=1;0!==daysArray.length%7;){var g=moment([a.year(),a.month(),h+f]);daysArray.push(this.createDayObject(g,this.eventsNextMonth)),f++}else for(f=1;0!==daysArray.length%7;)daysArray.push(this.calendarDay({classes:this.options.targets.empty+" next-month"})),f++;return daysArray},b.prototype.createDayObject=function(a,b){var c=[],d=moment(),e=0,f=b.length;for(e;f>e;e++)b[e]._clndrDateObject.date()==a.date()&&c.push(b[e]);var g="";return d.format("YYYY-MM-DD")==a.format("YYYY-MM-DD")&&(g+=" today"),c.length&&(g+=" event"),this.month.month()>a.month()?g+=" adjacent-month last-month":this.month.month()<a.month()&&(g+=" adjacent-month next-month"),this.calendarDay({day:a.date(),classes:this.options.targets.day+g,id:"calendar-day-"+a.format("YYYY-MM-DD"),events:c,date:a})},b.prototype.render=function(){this.calendarContainer.children().remove();var a=this.createDaysObject(this.month);this.month;var b={daysOfTheWeek:this.daysOfTheWeek,numberOfRows:Math.ceil(a.length/7),days:a,month:this.month.format("MMMM"),year:this.month.year(),eventsThisMonth:this.eventsThisMonth,extras:this.options.extras};this.options.render?this.calendarContainer.html(this.options.render(b)):this.calendarContainer.html(this.compiledClndrTemplate(b)),this.options.doneRendering&&this.options.doneRendering()},b.prototype.bindEvents=function(){var b=a(this.element),c=this;b.on("click","."+this.options.targets.day,function(b){if(c.options.clickEvents.click){var d=c.buildTargetObject(b.currentTarget,!0);c.options.clickEvents.click(d)}c.options.adjacentDaysChangeMonth&&(a(b.currentTarget).is(".last-month")?c.backActionWithContext(c):a(b.currentTarget).is(".next-month")&&c.forwardActionWithContext(c))}),b.on("click","."+this.options.targets.empty,function(b){if(c.options.clickEvents.click){var d=c.buildTargetObject(b.currentTarget,!1);c.options.clickEvents.click(d)}c.options.adjacentDaysChangeMonth&&(a(b.currentTarget).is(".last-month")?c.backActionWithContext(c):a(b.currentTarget).is(".next-month")&&c.forwardActionWithContext(c))}),b.on("click","."+this.options.targets.previousButton,{context:this},this.backAction).on("click","."+this.options.targets.nextButton,{context:this},this.forwardAction).on("click","."+this.options.targets.todayButton,{context:this},this.todayAction)},b.prototype.buildTargetObject=function(a,b){var c={element:a,events:[],date:null};if(b){var d=a.id.replace("calendar-day-","");c.date=moment(d),this.options.events&&(c.events=this.options.events.filter(function(a){return a._clndrDateObject.format("YYYY-MM-DD")==d}))}return c},b.prototype.forwardAction=function(a){a.data.context.month.add("months",1),a.data.context.options.clickEvents.nextMonth&&a.data.context.options.clickEvents.nextMonth(moment(a.data.context.month)),a.data.context.options.clickEvents.onMonthChange&&a.data.context.options.clickEvents.onMonthChange(moment(a.data.context.month)),a.data.context.render()},b.prototype.backAction=function(a){a.data.context.month.subtract("months",1),a.data.context.options.clickEvents.previousMonth&&a.data.context.options.clickEvents.previousMonth(moment(a.data.context.month)),a.data.context.options.clickEvents.onMonthChange&&a.data.context.options.clickEvents.onMonthChange(moment(a.data.context.month)),a.data.context.render()},b.prototype.backActionWithContext=function(a){a.month.subtract("months",1),a.options.clickEvents.previousMonth&&a.options.clickEvents.previousMonth(moment(a.month)),a.options.clickEvents.onMonthChange&&a.options.clickEvents.onMonthChange(moment(a.month)),a.render()},b.prototype.forwardActionWithContext=function(a){a.month.add("months",1),a.options.clickEvents.nextMonth&&a.options.clickEvents.nextMonth(a.month),a.options.clickEvents.onMonthChange&&a.options.clickEvents.onMonthChange(a.month),a.render()},b.prototype.todayAction=function(a){a.data.context.month=moment(),a.data.context.options.clickEvents.today&&a.data.context.options.clickEvents.today(moment(a.data.context.month)),a.data.context.options.clickEvents.onMonthChange&&a.data.context.options.clickEvents.onMonthChange(moment(a.data.context.month)),a.data.context.render()},b.prototype.forward=function(){return this.month.add("months",1),this.render(),this},b.prototype.back=function(){return this.month.subtract("months",1),this.render(),this},b.prototype.next=function(){return this.forward(),this},b.prototype.previous=function(){return this.back(),this},b.prototype.setMonth=function(a){return this.month.month(a),this.render(),this},b.prototype.setYear=function(a){return this.month.year(a),this.render(),this},b.prototype.nextYear=function(){return this.month.add("year",1),this.render(),this},b.prototype.previousYear=function(){return this.month.subtract("year",1),this.render(),this},b.prototype.setYear=function(a){return this.month.year(a),this.render(),this},b.prototype.setEvents=function(a){return this.options.events=this.addMomentObjectToEvents(a),this.render(),this},b.prototype.addEvents=function(b){return this.options.events=a.merge(this.options.events,this.addMomentObjectToEvents(b)),this.render(),this},b.prototype.addMomentObjectToEvents=function(a){var b=this,c=0,d=a.length;for(c;d>c;c++)a[c]._clndrDateObject=moment(a[c][b.options.dateParameter]);return a},b.prototype.calendarDay=function(b){var c={day:"",classes:this.options.targets.empty,events:[],id:"",date:null};return a.extend({},c,b)},a.fn.clndr=function(c){if(!a.data(this,"plugin_clndr")){var d=new b(this,c);return a.data(this,"plugin_clndr",d),d}}}(jQuery,window,document);