Online Self-Learning Curriculum Planner

Self-Learning Curriculum Planner

Design your own learning path and track your progress.

Add Learning Module

My Curriculum

Your learning plan will appear here.

Target: ${new Date(item.date + 'T00:00:00').toLocaleDateString()}

`; }); subjectDiv.innerHTML = `

${subject}

${itemsHTML}`; curriculumListDiv.appendChild(subjectDiv); } }; const renderProgressTracker = () => { progressListDiv.innerHTML = ''; const grouped = groupCurriculumBySubject(); if (Object.keys(grouped).length === 0) { progressListDiv.innerHTML = '

Track your modules here once you\'ve added them.

'; return; } for (const subject in grouped) { const subjectDiv = document.createElement('div'); subjectDiv.className = 'mb-6'; let itemsHTML = ''; grouped[subject].forEach(item => { itemsHTML += `

${item.module}

Target: ${new Date(item.date + 'T00:00:00').toLocaleDateString()}

`; }); subjectDiv.innerHTML = `

${subject}

${itemsHTML}`; progressListDiv.appendChild(subjectDiv); } }; // --- EVENT LISTENERS --- addModuleBtn.addEventListener('click', () => { const subject = subjectInput.value.trim() || 'General'; const module = moduleInput.value.trim(); const resource = resourceInput.value.trim(); const goal = goalInput.value.trim(); const date = dateInput.value; if (!module || !resource || !goal || !date) { alert('Please fill out all fields for the module.'); return; } curriculum.push({ id: Date.now(), subject, module, resource, goal, date, status: 'not-started' }); subjectInput.value = ''; moduleInput.value = ''; resourceInput.value = ''; goalInput.value = ''; dateInput.value = ''; renderAll(); }); curriculumListDiv.addEventListener('click', e => { if (e.target.classList.contains('delete-item-btn')) { const id = parseInt(e.target.dataset.id); curriculum = curriculum.filter(item => item.id !== id); renderAll(); } }); progressListDiv.addEventListener('change', e => { if (e.target.classList.contains('status-select')) { const id = parseInt(e.target.dataset.id); const newStatus = e.target.value; const item = curriculum.find(item => item.id === id); if (item) item.status = newStatus; renderProgressTracker(); // Just re-render the current view } }); // --- PDF DOWNLOAD --- downloadPdfBtn.addEventListener('click', () => { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const grouped = groupCurriculumBySubject(); let finalY = 30; doc.setFontSize(22); doc.text('Self-Learning Curriculum', 105, 20, { align: 'center' }); for (const subject in grouped) { if (finalY > 250) { // Add new page if content overflows doc.addPage(); finalY = 20; } doc.setFontSize(16); doc.text(subject, 14, finalY); finalY += 5; const tableData = grouped[subject].map(item => [ item.module, item.resource, item.goal, new Date(item.date + 'T00:00:00').toLocaleDateString(), item.status.replace('-', ' ') ]); doc.autoTable({ head: [['Module', 'Resource', 'Goal', 'Target Date', 'Status']], body: tableData, startY: finalY, theme: 'grid', styles: { cellPadding: 2, fontSize: 8 }, headStyles: { fillColor: [45, 55, 72] } }); finalY = doc.lastAutoTable.finalY + 15; } doc.save('self-learning-curriculum.pdf'); }); // --- INITIALIZATION --- loadSampleData(); });
Scroll to Top