forked from sumn2u/learn-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
121 lines (98 loc) · 3.58 KB
/
script.js
File metadata and controls
121 lines (98 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const monthYearElement = document.getElementById('month-year');
const datesElement = document.getElementById('calendar-dates');
const prevBtn = document.getElementById('month-prev');
const nextBtn = document.getElementById('month-next');
// Modal Elements
const modal = document.getElementById('event-modal');
const closeModalBtn = document.querySelector('.close-btn');
const selectedDateTitle = document.getElementById('selected-date');
const eventInput = document.getElementById('event-input');
const saveEventBtn = document.getElementById('save-event-btn');
const deleteEventBtn = document.getElementById('delete-event-btn');
let currentDate = new Date();
let clickedDate = null;
let events = JSON.parse(localStorage.getItem('events')) || {};
const months = [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
// --- Core Functions ---
function renderCalendar() {
const year = currentDate.getFullYear();
const month = currentDate.getMonth();
monthYearElement.innerText = `${months[month]} ${year}`;
datesElement.innerHTML = '';
// First day of the month (0 = Sunday, 1 = Monday, etc.)
const firstDay = new Date(year, month, 1).getDay();
// Total days in the current month
const totalDays = new Date(year, month + 1, 0).getDate();
// Add empty divs for days before the first day of the month
for (let i = 0; i < firstDay; i++) {
const emptyDiv = document.createElement('div');
datesElement.appendChild(emptyDiv);
}
// Render days
for (let day = 1; day <= totalDays; day++) {
const dayDiv = document.createElement('div');
dayDiv.classList.add('day');
dayDiv.innerText = day;
// Check if this day is "Today"
const today = new Date();
if (day === today.getDate() && month === today.getMonth() && year === today.getFullYear()) {
dayDiv.classList.add('current-date');
}
// Check for Events
const dateString = `${year}-${month + 1}-${day}`;
if (events[dateString]) {
dayDiv.classList.add('has-event');
dayDiv.title = events[dateString]; // Tooltip
}
// Add Click Event for Modal
dayDiv.addEventListener('click', () => openModal(dateString));
datesElement.appendChild(dayDiv);
}
}
function openModal(dateStr) {
clickedDate = dateStr;
selectedDateTitle.innerText = `Event for: ${dateStr}`;
eventInput.value = events[dateStr] || '';
modal.classList.remove('hidden');
}
function closeModal() {
modal.classList.add('hidden');
clickedDate = null;
}
// --- Event Listeners ---
prevBtn.addEventListener('click', () => {
currentDate.setMonth(currentDate.getMonth() - 1);
renderCalendar();
});
nextBtn.addEventListener('click', () => {
currentDate.setMonth(currentDate.getMonth() + 1);
renderCalendar();
});
closeModalBtn.addEventListener('click', closeModal);
saveEventBtn.addEventListener('click', () => {
if (eventInput.value.trim()) {
events[clickedDate] = eventInput.value;
localStorage.setItem('events', JSON.stringify(events));
}
closeModal();
renderCalendar();
});
deleteEventBtn.addEventListener('click', () => {
if (events[clickedDate]) {
delete events[clickedDate];
localStorage.setItem('events', JSON.stringify(events));
}
closeModal();
renderCalendar();
});
// Close modal if clicking outside
window.addEventListener('click', (e) => {
if (e.target === modal) {
closeModal();
}
});
// Initial Render
renderCalendar();