School Calendar 2026

Windsor Secondary School β€” Annual Year Plan

Legend: School Open/Close SMT / Staff Exam / Assessment Sport Parents Culture πŸ‡ΏπŸ‡¦ Public Holiday Term Day School Holiday

Sun
Mon
Tue
Wed
Thu
Fri
Sat
'2026-01-12': [{t:'Grade 10 Subject Selection', c:'ev-smt'}], '2026-01-13': [{t:'Grade 8 Induction', c:'ev-smt'},{t:'Matric Certificates', c:'ev-smt'}], '2026-01-14': [{t:'🏫 School Opens', c:'ev-school'},{t:'Baseline Evaluation starts', c:'ev-exam'}], '2026-01-16': [{t:'Awards Function', c:'ev-culture'}], '2026-01-17': [{t:'Strategic Workshop', c:'ev-smt'}], '2026-01-19': [{t:'SMT Meeting', c:'ev-smt'},{t:'Baseline Evaluation ends', c:'ev-exam'}], '2026-01-21': [{t:'Department Meetings', c:'ev-smt'}], '2026-01-23': [{t:'Gr12 Parents Meeting', c:'ev-parent'},{t:'RCL Elections', c:'ev-smt'}], '2026-01-26': [{t:'Learner Screening starts', c:'ev-multi'},{t:'SMT Meeting', c:'ev-smt'}], '2026-01-28': [{t:'Athletic Meeting', c:'ev-sport'}], '2026-01-30': [{t:'Submission March Tests', c:'ev-smt'},{t:'Learner Screening ends', c:'ev-multi'}], '2026-02-02': [{t:'By Elections', c:'ev-smt'}], '2026-02-04': [{t:'Athletic Meeting', c:'ev-sport'}], '2026-02-06': [{t:'Athletic Day', c:'ev-sport'}], '2026-02-09': [{t:'Learner Books Control starts', c:'ev-multi'}], '2026-02-13': [{t:'Learner Books Control ends', c:'ev-multi'}], '2026-02-16': [{t:'QMS starts', c:'ev-multi'}], '2026-02-20': [{t:'QMS ends', c:'ev-multi'}], '2026-02-21': [{t:'Parents Meeting', c:'ev-parent'}], '2026-02-24': [{t:'Staff Meeting', c:'ev-smt'}], '2026-02-27': [{t:'Exam Committee Meeting', c:'ev-exam'}], '2026-03-02': [{t:'Gr12 Mock Exam starts', c:'ev-exam'}], '2026-03-06': [{t:'Gr12 Mock Exam ends', c:'ev-exam'}], '2026-03-09': [{t:'Revision Gr8-11 starts', c:'ev-multi'}], '2026-03-12': [{t:'Revision Gr8-11 ends', c:'ev-multi'}], '2026-03-16': [{t:'Examinations All Grades starts', c:'ev-exam'}], '2026-03-27': [{t:'Examinations ends', c:'ev-exam'},{t:'🏫 School Closes', c:'ev-school'}], '2026-04-08': [{t:'🏫 Schools Re-Open', c:'ev-school'},{t:'Staff Briefing', c:'ev-smt'}], '2026-04-13': [{t:'Intervention Meeting', c:'ev-smt'}], '2026-04-16': [{t:'Analysis of Results', c:'ev-smt'}], '2026-04-17': [{t:'Issuing of Reports', c:'ev-parent'}], '2026-04-22': [{t:'Gr12 Analysis', c:'ev-smt'},{t:'QMS starts', c:'ev-multi'}], '2026-04-30': [{t:'QMS ends', c:'ev-multi'},{t:'Submit June Exam QP', c:'ev-exam'}], '2026-05-04': [{t:'Learner Books Control starts', c:'ev-multi'}], '2026-05-08': [{t:'Learner Books Control ends', c:'ev-multi'}], '2026-05-09': [{t:'Parents Meeting', c:'ev-parent'}], '2026-05-12': [{t:'Netball Meeting', c:'ev-sport'}], '2026-05-14': [{t:'Staff Meeting', c:'ev-smt'}], '2026-05-20': [{t:'Football Meeting', c:'ev-sport'}], '2026-06-01': [{t:'Gr12 Mock Exam starts', c:'ev-exam'}], '2026-06-05': [{t:'Gr12 Mock Exam ends', c:'ev-exam'}], '2026-06-08': [{t:'Revision Gr8-12 starts', c:'ev-multi'},{t:'June Exam starts', c:'ev-exam'}], '2026-06-12': [{t:'Revision ends', c:'ev-multi'}], '2026-06-25': [{t:'June Exam ends', c:'ev-exam'}], '2026-06-26': [{t:'🏫 School Closes', c:'ev-school'}], '2026-07-21': [{t:'🏫 School Re-Opens', c:'ev-school'},{t:'Briefing', c:'ev-smt'}], '2026-07-27': [{t:'Analysis of Results', c:'ev-smt'}], '2026-07-29': [{t:'Intervention Meeting', c:'ev-smt'}], '2026-07-31': [{t:'Open Day / Reports', c:'ev-parent'}], '2026-08-04': [{t:'Grade Analysis of Results', c:'ev-smt'}], '2026-08-05': [{t:'School League starts', c:'ev-sport'}], '2026-08-07': [{t:'Career Day Gr9', c:'ev-smt'}], '2026-08-11': [{t:'Summative Evaluations starts', c:'ev-exam'}], '2026-08-21': [{t:'Summative Evaluations ends', c:'ev-exam'}], '2026-08-26': [{t:'School League ends', c:'ev-sport'}], '2026-08-27': [{t:'Staff Meeting', c:'ev-smt'}], '2026-09-04': [{t:'Heritage Day Celebration', c:'ev-culture'}], '2026-09-07': [{t:'Arbour Day', c:'ev-culture'}], '2026-09-12': [{t:'Parents Meeting', c:'ev-parent'}], '2026-09-23': [{t:'🏫 School Closes', c:'ev-school'}], '2026-09-24': [{t:'Gr12 Mock Exam starts', c:'ev-exam'}], '2026-09-28': [{t:'Gr12 Mock Exam ends', c:'ev-exam'}], '2026-10-06': [{t:'🏫 School Opens', c:'ev-school'}], '2026-10-13': [{t:'Analysis of Results', c:'ev-smt'}], '2026-10-15': [{t:'Issuing of Reports', c:'ev-parent'}], }; const terms = [ { months: [0,1,2], label: 'Term 1: 14 Jan – 27 Mar' }, { months: [3,4,5], label: 'Term 2: 8 Apr – 26 Jun' }, { months: [6,7,8], label: 'Term 3: 21 Jul – 23 Sep' }, { months: [9,10,11], label: 'Term 4: 6 Oct – Dec' }, ]; const monthNames = ['January','February','March','April','May','June','July','August','September','October','November','December']; let currentYear = 2026; let currentMonth = 0; // January function getTerm(month) { for (const t of terms) { if (t.months.includes(month)) return t.label; } return ''; } function pad(n) { return String(n).padStart(2,'0'); } function renderCalendar() { const title = document.getElementById('cal-title'); const badge = document.getElementById('term-badge'); const grid = document.getElementById('cal-grid'); title.textContent = `${monthNames[currentMonth]} ${currentYear}`; badge.textContent = getTerm(currentMonth); // Remove old day cells (keep 7 header cells) while (grid.children.length > 7) grid.removeChild(grid.lastChild); const firstDay = new Date(currentYear, currentMonth, 1).getDay(); const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate(); const today = new Date(); // Empty cells before first day for (let i = 0; i < firstDay; i++) { const cell = document.createElement('div'); cell.className = 'cal-cell empty'; grid.appendChild(cell); } // Day cells for (let d = 1; d <= daysInMonth; d++) { const cell = document.createElement('div'); const key = `${currentYear}-${pad(currentMonth+1)}-${pad(d)}`; const isToday = today.getFullYear() === currentYear && today.getMonth() === currentMonth && today.getDate() === d; cell.className = 'cal-cell' + (isToday ? ' today' : ''); const num = document.createElement('div'); num.className = 'day-num'; num.textContent = d; cell.appendChild(num); if (events[key]) { events[key].forEach(ev => { const pill = document.createElement('span'); pill.className = `ev ${ev.c}`; pill.textContent = ev.t; pill.title = ev.t; cell.appendChild(pill); }); } grid.appendChild(cell); } } function prevMonth() { if (currentMonth === 0) { currentMonth = 11; currentYear--; } else currentMonth--; renderCalendar(); } function nextMonth() { if (currentMonth === 11) { currentMonth = 0; currentYear++; } else currentMonth++; renderCalendar(); } renderCalendar();