CSCI 145 - Introduction to Computer Science
Schedule
This is a living schedule and subject to change
Code
marked = require("marked");
dateFns = import("https://cdn.jsdelivr.net/npm/date-fns@4.1.0/+esm")
function md2html(text){
const template = document.createElement("template");
template.innerHTML = marked.parseInline(text);
return template.content.cloneNode(true);
}
function generateDay(day){
// deconstruct the date so it doesn't think it is in UTC
const [year, month, date] = day.date.split('-').map(Number);
const d = new Date(year, month-1, date);
const label = htl.html`<strong>${dateFns.format(d, "iiii, MMM d")}</strong>`;
const messages = day.entries.map(e=>htl.html`<li>${md2html(e)}</li>`);
const reading = day.reading.length > 0 ? htl.html`<li>📚 ${md2html(day.reading.join(", "))}</li>` : '';
const assigned = day.assigned.map(e=>htl.html`<li><strong>Assigned</strong> ${md2html(e)}</li>`);
const due = day.due.map(e=>htl.html`<li><strong>Due</strong> ${md2html(e.link)}</li>`);
return htl.html`<li class="entry">${label} <ul>${messages} ${reading} ${assigned} ${due}</ul></li>`;
}
function generateWeek(week, number){
const undatedItems = week.undated.map(entry=>htl.html`<li>${md2html(entry)}</li>`);
const days = week.days.filter(d=>d.entries.length + d.due.length + d.assigned.length > 0);
const dayItems = days.map(d=>generateDay(d));
return htl.html` <div class="weekBlock">
<div class="weekHeader">
<div>Week</div>
<div class="weekNumber">${number}</div>
</div>
<div class="entries">
${undatedItems.length > 0 ? htl.html`<ul>${undatedItems}</ul>` : ''}
${undatedItems.length > 0 && dayItems.length > 0 ? htl.html`<hr />` : ''}
${dayItems.length > 0 ? htl.html`<ul>${dayItems}</ul>` : ''}
${dayItems.length > 0 ? htl.html`<ul>${dayItems}</ul>` : ''}
</div>
</div>`
}
calendar = htl.html`<div class="calendar">${calendarData.map((w, index)=>generateWeek(w, index+1))}</div>`