UNPKG

webhandle-calendar

Version:

Calendar tools for node webhandle

125 lines (104 loc) 2.99 kB
const Event = require('./event') const eventStartCompare = require('../utils/event-start-compare') const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] const monthNamesShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] const dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] const dayNamesAbr = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] const shortDayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'] class MonthGrid { constructor(options) { options = options || {} this.events = [] this.monthNum = options.monthNum || 0 this.year = options.year || 2018 this.dayNames = dayNames this.shortDayNames = shortDayNames this.monthNames = monthNames this.monthNamesShort = monthNamesShort this.dayNamesAbr = dayNamesAbr } addEvent(event) { if(event instanceof Event == false) { event = new Event(event) } this.events.push(event) this.events.sort(eventStartCompare) } getMonthName() { return monthNames[this.monthNum] } getNextMonthName() { return monthNames[this.monthNum + 1 > 11 ? 0 : this.monthNum + 1] } getPreviousMonthName() { return monthNames[this.monthNum - 1 < 0 ? 11 : this.monthNum - 1] } getNextMonthStartDay() { let mon = this.monthNum + 2 let y = this.year if(mon > 12) { mon = 1 y++ } return '' + y + '-' + mon + '-01' } getPreviousMonthStartDay() { let mon = this.monthNum let y = this.year if(mon < 1) { mon = 12 y-- } return '' + y + '-' + mon + '-01' } createBoxes() { let dayCount = new Date(this.year, this.monthNum + 1, 0).getDate() let curMonth = [] let today = new Date() for(let i = 1; i <= dayCount; i++) { curMonth.push({ date: i, month: this.monthNum, year: this.year, dateString: `${this.year}-${this.monthNum + 1}-${i}`, events: [], markers: i < today.getDate() ? 'occurred' : 'forthcoming' }) } let gridDays = [] let lastMonthMaxDate = new Date(this.year, this.monthNum, 0).getDate() for(let i = new Date(this.year, this.monthNum, 1).getDay(); i > 0; i--) { gridDays.unshift({ date: lastMonthMaxDate--, events: [], markers: 'non-cur-month' }) } this.events.forEach(event => { let eventMonth = event.start.getMonth() event.month = eventMonth if(eventMonth == this.monthNum) { curMonth[event.start.getDate() - 1].events.push(event) } }) gridDays.push(...curMonth) let nextMonthDate = 1 for(let i = 6 - new Date(this.year, this.monthNum + 1, 0).getDay(); i > 0; i--) { gridDays.push({ date: nextMonthDate++, events: [], markers: 'non-cur-month' }) } gridDays.forEach(day => { if(day.events.length > 0) { day.markers += ' has-events' } else { day.markers += ' no-events' } }) return gridDays } } module.exports = MonthGrid