function addMonths(date, months) { date.setMonth(date.getMonth() + months); return date; } class Calendar { constructor(model, options, date) { this.Options = { Color: '', LinkColor: '', NavShow: true, NavVertical: false, NavLocation: '', DateTimeShow: true, DateTimeFormat: 'mmm, yyyy', DatetimeLocation: '', EventClick: '', EventTargetWholeDay: false, DisabledDays: [], ModelChange: model }; for (var key in options) { this.Options[key] = typeof options[key] == 'string' ? options[key].toLowerCase() : options[key]; } model ? this.Model = model : this.Model = {}; this.Today = new Date(); this.Selected = this.Today; this.Today.Month = this.Today.getMonth(); this.Today.Year = this.Today.getFullYear(); if (date) { this.Selected = date; } this.Selected.Month = this.Selected.getMonth(); this.Selected.Year = this.Selected.getFullYear(); this.Selected.Days = new Date(this.Selected.Year, (this.Selected.Month + 1), 0).getDate(); this.Selected.FirstDay = new Date(this.Selected.Year, (this.Selected.Month), 1).getDay(); this.Selected.LastDay = new Date(this.Selected.Year, (this.Selected.Month + 1), 0).getDay(); this.Prev = new Date(this.Selected.Year, (this.Selected.Month - 1), 1); if (this.Selected.Month == 0) { this.Prev = new Date(this.Selected.Year - 1, 1, 1); } this.Prev.Days = new Date(this.Prev.getFullYear(), (this.Prev.getMonth() + 1), 0).getDate(); } } function createCalendar(calendar, element, adjuster) { if (typeof adjuster !== 'undefined') { var newDate = new Date(calendar.Selected.Year, calendar.Selected.Month + adjuster, 1); calendar = new Calendar(calendar.Model, calendar.Options, newDate); element.innerHTML = ''; } else { for (var key in calendar.Options) { typeof calendar.Options[key] != 'function' && typeof calendar.Options[key] != 'object' && calendar.Options[key] ? element.className += " " + key + "-" + calendar.Options[key] : 0; } } var g = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; var months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; function AddSidebar() { var sidebar = document.createElement('div'); sidebar.className += 'cld-sidebar'; var monthList = document.createElement('ul'); monthList.className += 'cld-monthList'; for (var i = 0; i < months.length - 3; i++) { var x = document.createElement('li'); x.className += 'cld-month'; var n = i - (4 - calendar.Selected.Month); if (n < 0) { n += 12; } else if (n > 11) { n -= 12; } if (i == 0) { x.className += ' cld-rwd cld-nav'; x.addEventListener('click', function () { typeof calendar.Options.ModelChange == 'function' ? calendar.Model = calendar.Options.ModelChange() : calendar.Model = calendar.Options.ModelChange; createCalendar(calendar, element, -1); }); x.innerHTML += ''; } else if (i == months.length - 4) { x.className += ' cld-fwd cld-nav'; x.addEventListener('click', function () { typeof calendar.Options.ModelChange == 'function' ? calendar.Model = calendar.Options.ModelChange() : calendar.Model = calendar.Options.ModelChange; createCalendar(calendar, element, 1); }); x.innerHTML += ''; } else { if (i < 4) { x.className += ' cld-pre'; } else if (i > 4) { x.className += ' cld-post'; } else { x.className += ' cld-curr'; } (function () { var adj = (i - 4); x.addEventListener('click', function () { typeof calendar.Options.ModelChange == 'function' ? calendar.Model = calendar.Options.ModelChange() : calendar.Model = calendar.Options.ModelChange; createCalendar(calendar, element, adj); }); x.setAttribute('style', 'opacity:' + (1 - Math.abs(adj) / 4)); x.innerHTML += months[n].substr(0, 3); }()); if (n == 0) { var y = document.createElement('li'); y.className += 'cld-year'; if (i < 5) { y.innerHTML += calendar.Selected.Year; } else { y.innerHTML += calendar.Selected.Year + 1; } monthList.appendChild(y); } } monthList.appendChild(x); } sidebar.appendChild(monthList); if (calendar.Options.NavLocation) { document.getElementById(calendar.Options.NavLocation).innerHTML = ""; document.getElementById(calendar.Options.NavLocation).appendChild(sidebar); } else { element.appendChild(sidebar); } } var mainSection = document.createElement('div'); mainSection.className += "cld-main"; function AddDateTime() { var datetime = document.createElement('div'); datetime.className += "cld-datetime"; if (calendar.Options.NavShow && !calendar.Options.NavVertical) { var rwd = document.createElement('div'); rwd.className += " cld-rwd cld-nav"; rwd.addEventListener('click', function () { createCalendar(calendar, element, -1); }); rwd.innerHTML = ''; datetime.appendChild(rwd); } var today = document.createElement('div'); today.className += ' today'; today.innerHTML = months[calendar.Selected.Month] + ", " + calendar.Selected.Year; datetime.appendChild(today); if (calendar.Options.NavShow && !calendar.Options.NavVertical) { var fwd = document.createElement('div'); fwd.className += " cld-fwd cld-nav"; fwd.addEventListener('click', function () { createCalendar(calendar, element, 1); }); fwd.innerHTML = ''; datetime.appendChild(fwd); } if (calendar.Options.DatetimeLocation) { document.getElementById(calendar.Options.DatetimeLocation).innerHTML = ""; document.getElementById(calendar.Options.DatetimeLocation).appendChild(datetime); } else { mainSection.appendChild(datetime); } } // function AddLabels() { // var labels = document.createElement('ul'); // labels.className = 'cld-labels'; // var labelsList = ["P", "S", "Ç", "P", "C", "C", "P", "PZ", "S", "Ç", "P", "C", "C", "PZ", "P", "S", "Ç", "P", "C", "C", "PZ", "P", "S", "Ç", "P", "C", "C", "PZ", "P", "S", "Ç"]; // for (var i = 0; i < labelsList.length; i++) { // var label = document.createElement('li'); // label.className += "cld-label"; // label.innerHTML = labelsList[i ++]; // labels.appendChild(label); // console.log(i); // } // mainSection.appendChild(labels); // } function AddDays() { function DayNumber(n,m=0,y=0) { const tnum = []; tnum[1]= "01"; tnum[2]= "02"; tnum[3]= "03"; tnum[4]= "04"; tnum[5]= "05"; tnum[6]= "06"; tnum[7]= "07"; tnum[8]= "08"; tnum[9]= "09"; tnum[10]= "10"; tnum[11]= "11"; tnum[12]= "12"; tnum[13]= "13"; tnum[14]= "14"; tnum[15]= "15"; tnum[16]= "16"; tnum[17]= "17"; tnum[18]= "18"; tnum[19]= "19"; tnum[20]= "20"; tnum[21]= "21"; tnum[22]= "22"; tnum[23]= "23"; tnum[24]= "24"; tnum[25]= "25"; tnum[26]= "26"; tnum[27]= "27"; tnum[28]= "28"; tnum[29]= "29"; tnum[30]= "30"; tnum[31]= "31"; var number = document.createElement('p'); var mup=m+1; var tar=y+"-"+(tnum[mup])+"-"+tnum[n]+"T15:00"; var tarih=date = new Date(tar); // var gun =new Date(tarih); var gunu =tarih.getDay(); //var gn=tarih.substr(0,2); number.className += "cld-number"; number.innerHTML += ""+ g[gunu] +"
" + n + "
"; return number; } var days = document.createElement('ul'); days.className += "cld-days"; for (var i = 0; i < calendar.Selected.Days; i++) { var day = document.createElement('li'); day.className += "cld-day currMonth"; var d = (i + calendar.Selected.FirstDay) % 7; for (var q = 0; q < calendar.Options.DisabledDays.length; q++) { if (d == calendar.Options.DisabledDays[q]) { day.className += " disableDay"; } } var number = DayNumber((i + 1),calendar.Selected.Month,calendar.Selected.Year); for (var n = 0; n < calendar.Model.length; n++) { var evDate = calendar.Model[n].Date; var toDate = new Date(calendar.Selected.Year, calendar.Selected.Month, (i + 1)); if (evDate.getTime() == toDate.getTime()) { number.className += " eventday"; var title = document.createElement('p'); title.className += "cld-title"; if (typeof calendar.Model[n].Link == 'function' || calendar.Options.EventClick) { var a = document.createElement('a'); a.setAttribute('href', '#'); a.innerHTML += calendar.Model[n].Title; if (calendar.Options.EventClick) { var z = calendar.Model[n].Link; if (typeof calendar.Model[n].Link != 'string') { a.addEventListener('click', calendar.Options.EventClick.bind.apply(calendar.Options.EventClick, [null].concat(z))); if (calendar.Options.EventTargetWholeDay) { day.className += " clickable"; day.addEventListener('click', calendar.Options.EventClick.bind.apply(calendar.Options.EventClick, [null].concat(z))); } } else { a.addEventListener('click', calendar.Options.EventClick.bind(null, z)); if (calendar.Options.EventTargetWholeDay) { day.className += " clickable"; day.addEventListener('click', calendar.Options.EventClick.bind(null, z)); } } } else { a.addEventListener('click', calendar.Model[n].Link); if (calendar.Options.EventTargetWholeDay) { day.className += " clickable"; day.addEventListener('click', calendar.Model[n].Link); } } title.appendChild(a); } else { title.innerHTML += '' + calendar.Model[n].Title + ''; } number.appendChild(title); } } day.appendChild(number); if ((i + 1) == calendar.Today.getDate() && calendar.Selected.Month == calendar.Today.Month && calendar.Selected.Year == calendar.Today.Year) { day.className += " today"; } days.appendChild(day); } var extraDays = 0; if (days.children.length > 31) { extraDays = 0; } else if (days.children.length < 29) { extraDays = 0; } for (var i = 0; i < (extraDays - calendar.Selected.LastDay); i++) { var day = document.createElement('li'); day.className += "cld-day "; var d = (i + calendar.Selected.LastDay + 1) % 7; for (var q = 0; q < calendar.Options.DisabledDays.length; q++) { if (d == calendar.Options.DisabledDays[q]) { day.className += " disableDay"; } } var number = DayNumber(i + 1,calendar.Selected.Month,calendar.Selected.Year); day.appendChild(number); days.appendChild(day); } mainSection.appendChild(days); } if (calendar.Options.Color) { mainSection.innerHTML += ''; } if (calendar.Options.LinkColor) { mainSection.innerHTML += ''; } element.appendChild(mainSection); if (calendar.Options.NavShow && calendar.Options.NavVertical) { AddSidebar(); } if (calendar.Options.DateTimeShow) { AddDateTime(); } // AddLabels(); AddDays(); } function caleandar(el, data, settings) { var obj = new Calendar(data, settings); createCalendar(obj, el); }