'use strict';
//Public Globals
const days = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let c_date = new Date();
let day = c_date.getDay();
let month = c_date.getMonth();
let year = c_date.getFullYear();
(function App() {
const calendar = `
❰❱
${Object.keys(days).map(key => (
`
${days[key].substring(0,3)}
`
)).join('')}
`;
document.getElementById('app').innerHTML = calendar;
})()
function renderCalendar(m, y) {
//Month's first weekday
let firstDay = new Date(y, m, 1).getDay();
//Days in Month
let d_m = new Date(y, m+1, 0).getDate();
//Days in Previous Month
let d_pm = new Date(y, m, 0).getDate();
let table = document.getElementById('dates');
table.innerHTML = '';
let s_m = document.getElementById('s_m');
s_m.innerHTML = months[m] + ' ' + y;
let date = 1;
//remaing dates of last month
let r_pm = (d_pm-firstDay) +1;
for (let i = 0; i < 6; i++) {
let row = document.createElement('tr');
for (let j = 0; j < 7; j++) {
if (i === 0 && j < firstDay) {
let cell = document.createElement('td');
let span = document.createElement('span');
let cellText = document.createTextNode(r_pm);
span.classList.add('ntMonth');
span.classList.add('prevMonth');
cell.appendChild(span).appendChild(cellText);
row.appendChild(cell);
r_pm++;
}
else if (date > d_m && j <7) {
if (j!==0) {
let i = 0;
for (let k = j; k < 7; k++) {
i++
let cell = document.createElement('td');
let span = document.createElement('span');
let cellText = document.createTextNode(i);
span.classList.add('ntMonth');
span.classList.add('nextMonth');
cell.appendChild(span).appendChild(cellText);
row.appendChild(cell);
};
}
break;
}
else {
let cell = document.createElement('td');
let span = document.createElement('span');
let cellText = document.createTextNode(date);
span.classList.add('showEvent');
if (date === c_date.getDate() && y === c_date.getFullYear() && m === c_date.getMonth()) {
span.classList.add('bg-danger');
}
cell.appendChild(span).appendChild(cellText);
row.appendChild(cell);
date++;
}
}
table.appendChild(row);
}
}
renderCalendar(month, year)
$(function(){
function showEvent(eventDate){
let storedEvents = JSON.parse(localStorage.getItem('events'));
if (storedEvents == null){
$('.events-today').html('
No events found
');
}else{
let eventsToday = storedEvents.filter(eventsToday => eventsToday.eventDate === eventDate);
let eventsList = Object.keys(eventsToday).map(k => eventsToday[k]);
if(eventsList.length>0){
let eventsLi ='';
eventsList.forEach(event => $('.events-today').html(eventsLi +=`
${event.eventText}
`));
}else{
$('.events-today').html('
No events found
');
}
}
}
function removeEvent(id){
let storedEvents = JSON.parse(localStorage.getItem('events'));
if(storedEvents != null){
storedEvents = storedEvents.filter( ev => ev.id != id );
localStorage.setItem('events', JSON.stringify(storedEvents));
$('.toast-body').html('Your event have been removed');
$('.toast').toast('show');
}
}
$(document).on('click', '.remove-event', function(){
let eventId = $(this).data('event-id');
removeEvent(eventId);
})
$(document).on('click', '.prevMonth', function(){
year = (month === 0) ? year - 1 : year;
month = (month === 0) ? 11 : month - 1;
renderCalendar(month, year);
})
$(document).on('click', '.nextMonth', function(){
year = (month === 11) ? year + 1 : year;
month = (month + 1) % 12;
renderCalendar(month, year);
})
$(document).on('click', '.showEvent', function(){
$('.showEvent').removeClass('active');
$('#event').removeClass('d-none');
$(this).addClass('active');
let todaysDate = $(this).text() +' '+ (months[month]) +' '+ year;
let eventDay = days[new Date(year, month, $(this).text()).getDay()];
let eventDate = $(this).text() + month + year;
$('.event-date').html(todaysDate).data('eventdate', eventDate);
$('.event-day').html(eventDay);
showEvent(eventDate);
})
$(document).on('click', '.hide', function(){
$('#event').addClass('d-none');
})
$(document).on('click', '#createEvent', function(){
let events = localStorage.getItem('events');
let obj = [];
if (events) {
obj = JSON.parse(events);
}
let eventDate = $('.event-date').data('eventdate');
let eventText = $('#eventTxt').val();
let valid = false;
$('#eventTxt').removeClass('data-invalid');
$('.error').remove();
if (eventText == ''){
$('.events-input').append(`Please enter event`);
$('#eventTxt').addClass('data-invalid');
$('#eventTxt').trigger('focus');
}else if(eventText.length < 3){
$('#eventTxt').addClass('data-invalid');
$('#eventTxt').trigger('focus');
$('.events-input').append(`please enter at least three characters`);
}else{
valid = true;
}
if (valid){
let id =1;
if (obj.length > 0) {
id = Math.max.apply('', obj.map(function (entry) { return parseFloat(entry.id); })) + 1;
}
else {
id = 1;
}
obj.push({
'id' : id,
'eventDate': eventDate,
'eventText': eventText
});
localStorage.setItem('events', JSON.stringify(obj));
$('#eventTxt').val('');
$('.toast-body').html('Your event have been added');
$('.toast').toast('show');
showEvent(eventDate);
}
})
})