`;
assignmentListDiv.appendChild(itemEl);
});
};
const renderCalendar = () => {
calendarViewDiv.innerHTML = '';
const month = calendarDate.getMonth();
const year = calendarDate.getFullYear();
calendarMonthYear.textContent = calendarDate.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });
const firstDay = new Date(year, month, 1).getDay();
const daysInMonth = new Date(year, month + 1, 0).getDate();
const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
dayNames.forEach(name => {
const headerEl = document.createElement('div');
headerEl.className = 'text-center font-bold bg-slate-100 p-2';
headerEl.textContent = name;
calendarViewDiv.appendChild(headerEl);
});
for (let i = 0; i < firstDay; i++) {
calendarViewDiv.appendChild(document.createElement('div'));
}
for (let i = 1; i <= daysInMonth; i++) {
const dayEl = document.createElement('div');
dayEl.className = 'calendar-day p-2 bg-white';
dayEl.innerHTML = `
${i}`;
const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(i).padStart(2, '0')}`;
const todaysAssignments = assignments.filter(a => a.due === dateStr);
if(todaysAssignments.length > 0) {
const list = document.createElement('ul');
list.className = 'text-xs mt-4';
todaysAssignments.forEach(a => {
const li = document.createElement('li');
li.className = 'truncate';
li.innerHTML = `
${a.desc}`;
list.appendChild(li);
});
dayEl.appendChild(list);
}
calendarViewDiv.appendChild(dayEl);
}
};
// --- EVENT LISTENERS ---
addBtn.addEventListener('click', () => {
const desc = descInput.value.trim();
const subject = subjectInput.value.trim();
const due = dueDateInput.value;
const priority = prioritySelect.value;
if (!desc || !subject || !due) return;
assignments.push({ id: Date.now(), desc, subject, due, priority, completed: false });
descInput.value = '';
subjectInput.value = '';
renderAll();
});
assignmentListDiv.addEventListener('click', e => {
const id = parseInt(e.target.dataset.id);
if (e.target.classList.contains('delete-btn')) {
assignments = assignments.filter(item => item.id !== id);
}
if (e.target.classList.contains('toggle-complete-btn')) {
const item = assignments.find(item => item.id === id);
if (item) item.completed = e.target.checked;
}
renderAll();
});
prevMonthBtn.addEventListener('click', () => {
calendarDate.setMonth(calendarDate.getMonth() - 1);
renderCalendar();
});
nextMonthBtn.addEventListener('click', () => {
calendarDate.setMonth(calendarDate.getMonth() + 1);
renderCalendar();
});
// --- PDF DOWNLOAD ---
downloadPdfBtn.addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.setFontSize(22);
doc.text('Homework & Assignment Plan', 105, 20, { align: 'center' });
const tableData = assignments.map(a => [
a.desc,
a.subject,
new Date(a.due + 'T00:00:00').toLocaleDateString(),
a.priority.charAt(0).toUpperCase() + a.priority.slice(1),
a.completed ? 'Yes' : 'No'
]);
doc.autoTable({
head: [['Description', 'Subject', 'Due Date', 'Priority', 'Completed']],
body: tableData,
startY: 30,
theme: 'grid'
});
doc.save('homework-plan.pdf');
});
// --- INITIALIZATION ---
loadSampleData();
});