Skip to content

Instantly share code, notes, and snippets.

@cdrini
Last active September 6, 2018 15:32
Show Gist options
  • Save cdrini/378c44b6fb036d9bf411a1753cbea2e3 to your computer and use it in GitHub Desktop.
Save cdrini/378c44b6fb036d9bf411a1753cbea2e3 to your computer and use it in GitHub Desktop.
UW Important Dates as Outlook CSV
Subject Start Date End Date All Day Event Description Show Time As
Course selection period (Returning Waterloo students) 2018/5/23 2018/5/29 TRUE 3
Course selection period (New Waterloo students) 2018/7/3 2018/7/10 TRUE 3
Next term's class schedule viewable in Quest 2018/7/18 2018/7/19 TRUE 3
Drop/Add period begins (New Waterloo students) 2018/7/19 2018/7/20 TRUE Dates listed indicate Quest appointment period. <a href="https://uwaterloo.ca/quest/help/students/how-do-i/view-my-appointment-time-beginning-drop-add">See how to view appointment time for the beginning of drop/add</a>. Enrolment for all students continues beyond enrolment appointments until the end of the add period. 3
Drop/Add period begins (Returning Waterloo students) 2018/7/23 2018/7/25 TRUE Dates listed indicate Quest appointment period. <a href="https://uwaterloo.ca/quest/help/students/how-do-i/view-my-appointment-time-beginning-drop-add">See how to view appointment time for the beginning of drop/add</a>. Enrolment for all students continues beyond enrolment appointments until the end of the add period. 3
Fees due date 2018/8/22 2018/8/23 TRUE If you are not <a href="https://uwaterloo.ca/finance/student-financial-services/how-become-fees-arranged">"Fees Arranged"</a>, your access to LEARN may be affected. <a href="https://uwaterloo.ca/finance/student-financial-services">View more information.</a> 3
Late fees begin 2018/8/23 2018/8/24 TRUE <em>View <a href="https://uwaterloo.ca/finance/student-financial-services">Student Financial Services</a> website</em>. 3
Orientation 2018/9/2 2018/9/9 TRUE View <a href="https://uwaterloo.ca/orientation/">Orientation website</a> for students enrolling for the <strong>first time</strong> at Waterloo. 3
Labour Day: 2018/9/3 2018/9/4 TRUE <a href="https://uwaterloo.ca/human-resources/pay-administration/paid-holidays">University holiday</a> 3
Co-operative Work Term begins 2018/9/4 2018/9/5 TRUE Actual dates may vary depending on employer or student requirements. 3
Lectures or classes begin at Waterloo and Laurier 2018/9/6 2018/9/7 TRUE 3
Last day to select examination centres for online courses. 2018/9/16 2018/9/17 TRUE View in <a href="https://uwaterloo.ca/quest/home">Quest</a> 3
Add period ends 2018/9/19 2018/9/20 TRUE 3
English Language Proficiency Exam (ELPE) 2018/9/22 2018/9/23 TRUE <p>English Language Proficiency Exam (ELPE) dates for new students (in some faculties).</p> <div class="body"> <p>View details on the <a href="https://uwaterloo.ca/communication-requirement/writing-english-language-proficiency-exam/elpe-dates">Communication Requirement</a> website.</p> <p><em><strong>Note: </strong>April 8, 2019 will be the last time the ELPE is offered.</em></p> </div> 3
Deadline for 100% tuition refund 2018/9/26 2018/9/27 TRUE <em>FInance: View <a href="https://uwaterloo.ca/finance/student-financial-services">Student Financial Services</a> website</em>. 3
Drop, penalty 1 period begins 2018/9/27 2018/9/28 TRUE WD (Withdrew, no credit granted) grade assigned for course(s) dropped during this period. 3
Final exam schedules released 2018/9/28 2018/9/29 TRUE View <a href="https://uwaterloo.ca/registrar/final-examinations/exam-schedule">on-campus</a> and <a href="https://uwaterloo.ca/quest/help/students/how-do-i/online-exam-schedule">online</a> schedules 3
Thanksgiving Day: 2018/10/8 2018/10/9 TRUE <a href="https://uwaterloo.ca/human-resources/pay-administration/paid-holidays">University holiday</a> 3
Opportunity to adjust your online course exam location 2018/10/9 2018/10/24 TRUE View: <a href="https://uwaterloo.ca/quest/help/students/how-do-i/online-exam-schedule">How do I view my online course exam schedule?</a> 3
Mid-Term Study Break 2018/10/9 2018/10/11 TRUE <p><em>Co-operative employment interviews may continue during these periods.</em></p> <p><em>Fall mid-term study break also known as “Fall Break”</em>.</p> <p><em>Winter mid-term study breaks also known as "Reading Week".</em></p> 3
Make-up day for October 9 2018/10/11 2018/10/12 TRUE The loss of a Tuesday class on October 9 (Fall Break study day) will be made up by following a Tuesday schedule on October 11. 3
Make-up day for October 10 2018/10/12 2018/10/13 TRUE The loss of a Wednesday class on October 10 (Fall Break study day) will be made up by following a Wednesday schedule on October 12. 3
Last day for online students to change their examination location 2018/10/23 2018/10/24 TRUE 3
Deadline for 50% tuition refund 2018/10/24 2018/10/25 TRUE <em>Finance: View <a href="https://uwaterloo.ca/finance/student-financial-services">Student Financial Services</a> website</em>. 3
Fall 2018 Convocation 2018/10/26 2018/10/28 TRUE View the <a href="https://uwaterloo.ca/registrar/convocation">Convocation web page</a> for ceremony details. 3
Fee arrangement deadline 2018/10/31 2018/11/1 TRUE A <a href="https://uwaterloo.ca/forms/undergraduate-studies/late-fees-arrangement">Late Fees Arrangement form</a> is required to become <a href="https://uwaterloo.ca/finance/student-financial-services">fees arranged</a> after these dates. 3
Drop, penalty 1 period ends 2018/11/19 2018/11/20 TRUE WD (Withdrew, no credit granted) grade assigned for course(s) dropped during this period. 3
Drop, penalty 2 period begins 2018/11/20 2018/11/21 TRUE <em>WF (Withdrew/Failure, no credit granted, value 32) grade assigned for course(s) dropped during this period. (</em><strong><em>Engineering students</em></strong><em>: Visit </em><em><a href="http://ugradcalendar.uwaterloo.ca/page/ENG-Examinations-and-Promotions-Rules">course load</a> and <a href="http://ugradcalendar.uwaterloo.ca/page/ENG-Voluntary-Withdrawals-1">withdrawal</a> in the Undergraduate Clendar for specific regulations.)</em> 3
Lectures or classes end at Waterloo 2018/12/3 2018/12/4 TRUE 3
Make-up day for Thanksgiving Day 2018/12/3 2018/12/4 TRUE The loss of a Monday class on October 8 will be made up by following a Monday schedule on December 3. 3
Pre-examination study days 2018/12/4 2018/12/6 TRUE 3
Grades due 2018/12/4 2019/1/3 TRUE 3
Drop, penalty 2 period ends 2018/12/5 2018/12/6 TRUE Last day to drop a course without a petition; WF (Withdrew/Failure, no credit granted, value 32) grade assigned for course(s) dropped during this period. 3
Lectures or classes end at Laurier 2018/12/5 2018/12/6 TRUE 3
On-campus final examination period 2018/12/6 2018/12/22 TRUE 3
Online course final examination - Day 1 2018/12/7 2018/12/8 TRUE 3
Online course final examination - Day 2 2018/12/8 2018/12/9 TRUE 3
Co-operative Work Term ends 2018/12/21 2018/12/22 TRUE Actual dates may vary depending on employer or student requirements. 3
Unofficial grades begin to appear in Quest 2018/12/22 2018/12/23 TRUE Registered students can view their unofficial term grades in <a href="https://uwaterloo.ca/quest/">Quest</a>. (Not all grades will be available on this date.) 3
University holiday closure 2018/12/24 2019/1/1 TRUE <a href="https://uwaterloo.ca/human-resources/pay-administration/paid-holidays">University holiday</a> 3
Standing decisions and official grades are available in Quest 2019/1/18 2019/1/19 TRUE Registered students can view their official term grades in <a href="https://uwaterloo.ca/quest/">Quest</a>. This is the date when official and complete term grades will appear along with academic standings. Averages do not appear on the official transcript. 3
/**
* This isn't really meant to be re-useable; just a quick script I used but which I made
* public in case someone wanted to check validity or create a more re-useable script.
* First you have to inject d3 into your browser console (https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js),
* then run the following code.
*/
var COLUMN = "Fall 2018";
var TABLE_SEL = "table.sticky-enabled";
var MONTHS_PAT = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
var MONTHS_TO_INT = new Map(MONTHS_PAT.split("|").map((mo,i) => [mo,i]));
var CONTAINER_ELS = new Set(["DIV", "P", "EM", "#text"]);
var $ = document.querySelectorAll.bind(document);
var headers = Array.from($(`${TABLE_SEL} th`)).map(th => th.textContent.trim());
var col_index = headers.findIndex(x => x == COLUMN);
// Parse a date like "Jan 12, 2018" to an array [2018, 1, 12]
function parse_date(str) {
var [mo, da, ye] = str.split(/[\s,]+/);
return [
parseInt(ye, 10),
MONTHS_TO_INT.get(mo) + 1,
parseInt(da, 10)
];
}
function date_arr_to_date([y, m, d]) {
return new Date(y, m-1, d);
}
// Increment a [yy, mm, dd] date (inplace)
function incr_date(date) {
var d = date_arr_to_date(date);
var new_d = new Date(d.getTime() + 24 * 60 * 60 * 1000);
date[0] = new_d.getFullYear();
date[1] = new_d.getMonth() + 1;
date[2] = new_d.getDate();
}
// Merge adjacent EM (or text) nodes
function collapse_adjacent_ems(parent) {
function is_mergeable(el) {
return (el.nodeName == "EM" && el.childNodes.length == 1 && el.childNodes[0].nodeName == "#text") ||
(el.nodeName == "#text");
}
var i = 0;
while(parent.childNodes.length > (i+1)) {
if (is_mergeable(parent.childNodes[i]) && is_mergeable(parent.childNodes[i+1])) {
parent.childNodes[i].textContent += parent.childNodes[i+1].textContent;
parent.childNodes[i+1].remove();
}
else {
i++;
}
}
}
Array.prototype.flatMap = function(transform) {
return this.map(transform)
.reduce((acc, cur) => {
acc.push(...(cur instanceof Array ? cur : [cur]));
return acc;
}, []);
}
// Remove "wrapper" els (i.e. single child) matching types in the set types
function remove_wrappers(types, el) {
if (!el) return el;
return (el.childNodes.length == 1 && types.has(el.nodeName))
? remove_wrappers(types, el.childNodes[0])
: el;
}
// Remove rows which have "inappliccable" dates for the active `col_index`
function remove_inapplicable(tr) {
var date_td = tr.children[col_index];
return date_td.textContent.trim() != "Not applicable";
}
// Create an event object from a row in the table
function event_from_row(tr) {
var title_td = tr.children[0];
var title = title_td.childNodes[0].textContent.trim();
var date_td = tr.children[col_index];
if (date_td.querySelector('b')) {
// need multiple events
return Array.from(date_td.querySelectorAll('b'))
.map(b => {
var new_tr = tr.cloneNode(true);
// add subevent to title
var title_td = new_tr.children[0];
var old_title = title_td.childNodes[0].textContent.trim();
var subtitle = b.innerHTML.replace(/<br>/g, ' ').trim().replace(/:$/, '');
var new_title = old_title + ` (${subtitle})`
title_td.childNodes[0].textContent = new_title
// Update date
var date_td = new_tr.children[col_index];
date_td.innerHTML = '';
date_td.appendChild(b.nextSibling.cloneNode(true));
return event_from_row(new_tr);
})
}
var date_str = date_td.childNodes[0].textContent.trim();
var start, end;
if (date_str.indexOf(" to ") != -1) {
[start, end] = date_str.split(" to ").map(parse_date);
if (isNaN(start[0])) {
start[0] = end[0];
// Special case for when over a year
if (date_arr_to_date(start).getTime() > date_arr_to_date(end).getTime()) {
start[0] = end[0] - 1;
}
}
}
else {
start = end = parse_date(date_str);
}
end = Array.from(end); // create copy
incr_date(end);
var date_notes = null;
var date_notes_el = date_td.querySelector(".special_notes")
if (date_notes_el) date_notes = date_notes_el.textContent.trim();
var desc = null;
var desc_el = tr.children[0].querySelector(".body");
desc_el = remove_wrappers(CONTAINER_ELS, desc_el);
if (desc_el) {
collapse_adjacent_ems(desc_el);
desc_el = remove_wrappers(CONTAINER_ELS, desc_el);
console.log(desc_el);
desc = CONTAINER_ELS.has(desc_el.nodeName)
? desc_el.innerHTML || desc_el.textContent
: desc_el.outerHTML || desc_el.textContent;
}
return {title, start, end, date_notes, desc, tr};
}
var rows = Array.from($(`${TABLE_SEL} tbody tr`))
.filter(remove_inapplicable)
.flatMap(event_from_row);
// custom edits
// Online course examination days should be a range
var online_exam_days = rows.find(e => e.title == "Online course examination days");
if (online_exam_days) {
online_exam_days.end = parse_date(online_exam_days.date_notes.trim());
online_exam_days.end[2]++; // cause range end needs to be ahead by 1
online_exam_days.date_notes = null;
}
function to_outlook_csv(rows) {
function format_date(date) { return date.join('/'); }
return rows.map(row => {
var description = "";
if (row.date_notes)
description = "* " + row.date_notes;
if (row.desc)
description += (description ? "\n\n" : "") + row.desc;
return {
Subject: row.title,
"Start Date": format_date(row.start),
"End Date": format_date(row.end),
"All Day Event": "TRUE",
Description: description,
"Show Time As": 3
};
})
}
d3.csvFormat(to_outlook_csv(rows));
Subject Start Date End Date All Day Event Description Show Time As
Course selection period 2018/1/23 2018/1/31 TRUE 3
Next term schedule available to view in Quest 2018/3/22 2018/3/23 TRUE 3
Drop/add period begins 2018/3/26 2018/3/27 TRUE <a href="https://uwaterloo.ca/quest/help/students/how-do-i/view-my-appointment-time-beginning-drop-add">View appointment time for the beginning of drop/add.</a> 3
Fees due date 2018/4/24 2018/4/25 TRUE If you are not <a href="https://uwaterloo.ca/finance/student-financial-services/how-become-fees-arranged">"Fees Arranged"</a>, your access to LEARN may be affected. <a href="https://uwaterloo.ca/finance/student-financial-services">View more information.</a> 3
Late fees begin 2018/4/25 2018/4/26 TRUE <a href="https://uwaterloo.ca/finance/student-financial-services">View more information.</a> 3
Orientation week 2018/4/30 2018/5/6 TRUE View <a href="https://uwaterloo.ca/orientation/">Orientation website</a> for students enrolling for the <strong>first time</strong> at Waterloo. 3
Co-operative work term begins 2018/5/1 2018/5/2 TRUE Actual dates may vary depending on employer or student requirements. 3
Lectures or classes begin at Laurier 2018/5/7 2018/5/8 TRUE 3
Lectures or classes begin at UWaterloo 2018/5/1 2018/5/2 TRUE 3
Last day to select examination centres for online courses. 2018/5/13 2018/5/14 TRUE <em>View in <a href="https://uwaterloo.ca/quest/home">Quest</a></em>. 3
Add period ends 2018/5/14 2018/5/15 TRUE 3
Victoria Day 2018/5/21 2018/5/22 TRUE <a href="https://uwaterloo.ca/human-resources/support-employees/payroll/paid-holidays">University holiday</a> 3
Drop, no penalty period ends 2018/5/22 2018/5/23 TRUE <a href="https://uwaterloo.ca/finance/student-financial-services">Deadline to withdraw from courses with 100% tuition refund.</a> 3
Make-up day for Victoria Day 2018/5/22 2018/5/23 TRUE The loss of a Monday class on May 21 will be made up by following a Monday schedule on May 22. 3
Drop, penalty 1 period begins 2018/5/23 2018/5/24 TRUE WD (Withdrew, no credit granted) grade assigned for course(s) dropped during this period 3
Final exam schedules released 2018/5/25 2018/5/26 TRUE View <a href="https://uwaterloo.ca/registrar/final-examinations/exam-schedule">on-campus</a> and <a href="https://uwaterloo.ca/quest/help/students/how-do-i/online-exam-schedule">online</a> schedules 3
Opportunity to adjust your online course exam location 2018/6/6 2018/6/21 TRUE View: <a href="https://uwaterloo.ca/quest/help/students/how-do-i/online-exam-schedule">How do I view my online course exam schedule?</a> 3
Spring 2018 Convocation 2018/6/12 2018/6/17 TRUE View the <a href="https://uwaterloo.ca/registrar/convocation">Convocation web page</a> 3
Last day for online students to change their examination location 2018/6/20 2018/6/21 TRUE 3
Deadline for 50% tuition refund 2018/6/19 2018/6/20 TRUE <em>View </em><em><a href="https://uwaterloo.ca/finance/student-financial-services">Student Financial Services</a></em>&nbsp;website 3
Fee arrangement deadline 2018/6/30 2018/6/31 TRUE A "<a href="https://uwaterloo.ca/forms/undergraduate-studies/late-fees-arrangement">Late Fees Arrangement</a>" form required to become <a href="https://uwaterloo.ca/finance/student-financial-services">fees arranged</a> after these dates. 3
Canada Day 2018/7/2 2018/7/3 TRUE <a href="https://uwaterloo.ca/human-resources/support-employees/payroll/paid-holidays">University holiday</a> 3
Drop, penalty 1 period ends 2018/7/11 2018/7/12 TRUE WD (Withdrew, no credit granted) grade assigned for course(s) dropped 3
Drop, penalty 2 period begins 2018/7/12 2018/7/13 TRUE <em>WF (Withdrew/Failure, no credit granted, value 32) grade assigned for course(s) dropped (</em><strong><em>Engineering students</em></strong><em>: Visit </em><em><a href="http://ugradcalendar.uwaterloo.ca/page/ENG-Examinations-and-Promotions-Rules">course load</a> and <a href="http://ugradcalendar.uwaterloo.ca/page/ENG-Voluntary-Withdrawals-1">withdrawal</a> in the calendar for specific regulations.)</em> 3
Lectures or classes end 2018/7/25 2018/7/26 TRUE 3
Make-up Day for Canada Day observance on July 2 2018/7/25 2018/7/26 TRUE The loss of a Monday class on July 2 will be made up by following a Monday schedule on July 25. 3
Pre-examination study days 2018/7/26 2018/7/28 TRUE 3
Drop, penalty 2 period ends 2018/7/27 2018/7/28 TRUE WF (Withdrew/Failure, no credit granted, value 32) grade assigned for course(s) dropped; last day to drop a course without a petition 3
On-campus examinations begin 2018/7/28 2018/7/29 TRUE 3
Grades due 2018/8/27 2018/8/28 TRUE 3
Online course examination days 2018/7/28 2018/8/4 TRUE 3
Civic Day 2018/8/6 2018/8/7 TRUE <a href="https://uwaterloo.ca/human-resources/support-employees/payroll/paid-holidays">University holiday</a> 3
On-campus examinations end 2018/8/11 2018/8/12 TRUE 3
Co-operative work term ends 2018/8/24 2018/8/25 TRUE Actual dates may vary depending on employer or student requirements 3
Unofficial grades begin to appear in Quest 2018/8/13 2018/8/14 TRUE Beginning this date, registered students can view their unofficial term grades in <a href="https://uwaterloo.ca/quest/">Quest</a>. (Not all grades will appear.) 3
Standings and official grades are available in Quest 2018/9/19 2018/9/20 TRUE Beginning this date, registered students can view their official term grades in <a href="https://uwaterloo.ca/quest/">Quest</a>. This is the date when official and complete term grades will appear along with academic standings and when official transcripts that have been ordered will be released. Averages do not appear on the official transcript. 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment