forked from kylestetz/CLNDR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclndr.min.js
2 lines (2 loc) · 6.11 KB
/
clndr.min.js
1
2
/*! clndr.min.js v1.0.3 2013-09-14 */
!function(a){function b(b,c){this.element=b,this.options=a.extend({},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,onMonthChange:null},targets:{nextButton:"clndr-next-button",previousButton:"clndr-previous-button",day:"day",empty:"empty"},events:[],extras:null,dateParameter:"date",doneRendering:null,render:null};b.prototype.init=function(){if(this.daysOfTheWeek=this.options.weekOffset?this.shiftWeekdayLabels(this.options.weekOffset):["S","M","T","W","T","F","S"],!this.options.render&&"undefined"==typeof _)throw new Error("Underscore was not found. Please include underscore.js OR provide a custom render function.");this.options.render||(this.compiledClndrTemplate=_.template(this.options.template)),a(this.element).html("<div class='clndr'></div>"),this.calendarContainer=a(".clndr",this.element),this.render()},b.prototype.shiftWeekdayLabels=function(a){for(var b=["S","M","T","W","T","F","S"],c=0;a>c;c++)b.push(b.shift());return b},b.prototype.createDaysObject=function(a){daysArray=[];var b=a.startOf("month"),c=moment(),d=b.day()-this.options.weekOffset;0>d&&(d+=7);for(var e=0;d>e;e++)daysArray.push(this.calendarDay());this.eventsThisMonth=[],this.options.events.length&&(this.eventsThisMonth=this.options.events.filter(function(b){return b._clndrDateObject.format("YYYY-MM")==a.format("YYYY-MM")}));for(var f=b.daysInMonth(),e=1;f>=e;e++){var g=[],h=0,i=this.eventsThisMonth.length;for(h;i>h;h++)this.eventsThisMonth[h]._clndrDateObject.date()==e&&g.push(this.eventsThisMonth[e]);var j=moment([a.year(),a.month(),e]),k="";c.format("YYYY-MM-DD")==j.format("YYYY-MM-DD")&&(k+=" today"),g.length&&(k+=" event"),daysArray.push(this.calendarDay({day:e,classes:this.options.targets.day+k,id:"calendar-day-"+j.format("YYYY-MM-DD"),events:g,date:j}))}for(;0!==daysArray.length%7;)daysArray.push(this.calendarDay());return daysArray},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.bindEvents(),this.options.doneRendering&&this.options.doneRendering()},b.prototype.bindEvents=function(){a("."+this.options.targets.day,this.element).on("click",{context:this},function(a){if(a.data.context.options.clickEvents.click){var b=a.data.context.buildTargetObject(a.currentTarget,!0);a.data.context.options.clickEvents.click(b)}}),a("."+this.options.targets.empty,this.element).on("click",{context:this},function(a){if(a.data.context.options.clickEvents.click){var b=a.data.context.buildTargetObject(a.currentTarget,!1);a.data.context.options.clickEvents.click(b)}}),a("."+this.options.targets.previousButton,this.element).on("click",{context:this},this.backAction),a("."+this.options.targets.nextButton,this.element).on("click",{context:this},this.forwardAction)},b.prototype.buildTargetObject=function(a,b){var c={element:a,events:null,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(a.data.context.month),a.data.context.options.clickEvents.onMonthChange&&a.data.context.options.clickEvents.onMonthChange(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(a.data.context.month),a.data.context.options.clickEvents.onMonthChange&&a.data.context.options.clickEvents.onMonthChange(a.data.context.month),a.data.context.render()},b.prototype.forward=function(){this.month.add("months",1),this.render()},b.prototype.back=function(){this.month.subtract("months",1),this.render()},b.prototype.next=function(){this.forward()},b.prototype.previous=function(){this.back()},b.prototype.setMonth=function(a){this.month.month(a),this.render()},b.prototype.setYear=function(a){this.month.year(a),this.render()},b.prototype.nextYear=function(){this.month.add("year",1),this.render()},b.prototype.previousYear=function(){this.month.subtract("year",1),this.render()},b.prototype.setYear=function(a){this.month.year(a),this.render()},b.prototype.setEvents=function(a){this.options.events=this.addMomentObjectToEvents(a),calendar.render()},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);