Misc. fixes

This commit is contained in:
Jared He 2021-06-19 20:56:29 -04:00
parent 1800a22fb4
commit 8d6da95e27
5 changed files with 50 additions and 62 deletions

View File

@ -6,12 +6,14 @@ global.window = window;
var showdown = require("showdown"); var showdown = require("showdown");
const converterShowdown = new showdown.Converter(); const converterShowdown = new showdown.Converter();
const libxmljs = require("libxmljs"); const libxmljs = require("libxmljs");
const getTerm = require("./getTerm.js");
fs.readFile("./events.xml", "utf8", (err, data) => { fs.readFile("../../events.xml", "utf8", (err, data) => {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
} }
data = data.replace(/<!DOCTYPE.*>/, "");
parseXML(data); parseXML(data);
}); });
@ -41,6 +43,8 @@ const parseTime = (dateStr, timeStr) => {
return date; return date;
}; };
const nodeChildrenToString = (nodeChildren) => { const nodeChildrenToString = (nodeChildren) => {
let string = ""; let string = "";
for (let i = 0; i < nodeChildren.length; ++i) { for (let i = 0; i < nodeChildren.length; ++i) {
@ -56,54 +60,36 @@ const nodeChildrenToString = (nodeChildren) => {
const parseXML = (XML) => { const parseXML = (XML) => {
const xmlDoc = libxmljs.parseHtml(XML); const xmlDoc = libxmljs.parseHtml(XML);
let eventdefsChildren = xmlDoc.get("//eventdefs").childNodes(); let eventdefsChildren = xmlDoc.get("//eventdefs").childNodes();
let currentTerm = ""; eventdefsChildren.forEach((eventItem) => {
for (let i = 0; i < eventdefsChildren.length; ++i) {
// sometimes there's events that are commented out, hopefully this catches that // sometimes there's events that are commented out, hopefully this catches that
if ( if (eventItem.type() === "element") {
eventdefsChildren[i].type() === "comment" && const title = eventItem.attr("title").value();
/((winter)|(fall)|(spring))/.exec( const shortNodes = eventItem.get(".//short").childNodes();
eventdefsChildren[i].toString().toLowerCase()
)
) {
currentTerm = eventdefsChildren[i].text().replace(/[\\\\/:*?\"<>|]/g, "");
currentTerm = currentTerm.replace(/(\s+)/g, "-");
} else if (eventdefsChildren[i].type() === "element") {
const title = eventdefsChildren[i].attr("title").value();
const shortNodes = eventdefsChildren[i].get(".//short").childNodes();
let short = converterShowdown.makeMarkdown( let short = converterShowdown.makeMarkdown(
nodeChildrenToString(shortNodes) nodeChildrenToString(shortNodes)
); );
// remove newlines from short // remove newlines from short
short = short.replace(/\n/g, ""); short = short.replace(/\n/g, "");
const dateStr = eventdefsChildren[i].attr("date").value(); const dateStr = eventItem.attr("date").value();
const timeStr = eventdefsChildren[i].attr("time").value(); const timeStr = eventItem.attr("time").value();
const date = parseTime(dateStr, timeStr); const date = parseTime(dateStr, timeStr);
const location = eventdefsChildren[i].attr("room").value(); currentTerm = getTerm(date);
const location = eventItem.attr("room").value();
const online = location.toLowerCase() === "online" ? true : false; const online = location.toLowerCase() === "online" ? true : false;
let abstract = short; let abstract = short;
if (eventdefsChildren[i].get(".//abstract") !== undefined) { if (eventItem.get(".//abstract") !== undefined) {
const abstractNodes = eventdefsChildren[i] const abstractNodes = eventItem.get(".//abstract").childNodes();
.get(".//abstract")
.childNodes();
abstract = converterShowdown.makeMarkdown( abstract = converterShowdown.makeMarkdown(
nodeChildrenToString(abstractNodes) nodeChildrenToString(abstractNodes)
); );
abstract = abstract.replace(/<br>/g, "\n"); abstract = abstract.replace(/<br>/g, "\n");
} }
let registerLink = "";
// detects a link in markdown such as [CSC Club Website](<http://csclub.uwaterloo.ca//>)
const markdownLinkDetectRegex = /(?<=\[(.*)\]\(<)(.*)(?=>\))/;
if (markdownLinkDetectRegex.exec(abstract)) {
registerLink = `\n registerLink: "${
markdownLinkDetectRegex.exec(abstract)[0]
}",`;
}
const mdx = `export const metadata = { const mdx = `export const metadata = {
name: "${title}", name: "${title}",
short: "${short}", short: "${short}",
date: new Date("${date.toString()}"), date: new Date("${date.toString()}"),
online: ${online}, online: ${online},
location: "${location}",${registerLink} location: "${location}",
} }
${abstract}`; ${abstract}`;
@ -127,5 +113,5 @@ ${abstract}`;
} }
); );
} }
} });
}; };

View File

@ -1,5 +1,6 @@
<?xml version='1.0'?> <?xml version='1.0'?>
<!DOCTYPE eventdefs SYSTEM "csc.dtd" [<!ENTITY mdash "&#x2014;">]>
<eventdefs> <eventdefs>
<!-- Fall 2016 --> <!-- Fall 2016 -->
<eventitem date="2016-12-05" time="6:00 PM" room="MC Comfy" title="CSC/PMC EOT Party"> <eventitem date="2016-12-05" time="6:00 PM" room="MC Comfy" title="CSC/PMC EOT Party">

View File

@ -7181,7 +7181,7 @@ to get a hands on feeling for the language. Don't worry if you haven't seen the
<!--spring 2007--> <!--Spring 2007-->
<eventitem date="2007-07-17" time="7:00 PM" room="AL 116" title="C++0x - An Overview"> <eventitem date="2007-07-17" time="7:00 PM" room="AL 116" title="C++0x - An Overview">
<short>Bjarne Stroustrup</short> <short>Bjarne Stroustrup</short>

View File

@ -0,0 +1,22 @@
module.exports = getTerm = (dateStr) => {
const date = new Date(dateStr);
let term = "";
const year = date.getUTCFullYear();
if (
new Date(`${year}-01-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-04-30`).getTime()
) {
term = "Winter";
} else if (
new Date(`${year}-05-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-08-31`).getTime()
) {
term = "Spring";
} else if (
new Date(`${year}-09-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-12-31`).getTime()
) {
term = "Fall";
}
return `${term}-${year}`;
};

View File

@ -6,12 +6,14 @@ global.window = window;
var showdown = require("showdown"); var showdown = require("showdown");
const converterShowdown = new showdown.Converter(); const converterShowdown = new showdown.Converter();
const libxmljs = require("libxmljs"); const libxmljs = require("libxmljs");
const getTerm = require("./getTerm.js");
fs.readFile("./news.xml", "utf8", (err, data) => { fs.readFile("../../news.xml", "utf8", (err, data) => {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
} }
data = data.replace(/<!DOCTYPE.*>/, "");
parseXML(data); parseXML(data);
}); });
@ -31,39 +33,16 @@ const nodeChildrenToString = (nodeChildren) => {
return string; return string;
}; };
const getTerm = (dateStr) => {
const date = new Date(dateStr);
let term = "";
const year = date.getUTCFullYear();
if (
new Date(`${year}-01-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-04-30`).getTime()
) {
term = "Winter";
} else if (
new Date(`${year}-05-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-08-31`).getTime()
) {
term = "Spring";
} else if (
new Date(`${year}-09-01`).getTime() <= date.getTime() &&
date.getTime() <= new Date(`${year}-12-31`).getTime()
) {
term = "Fall";
}
return `-${term}-${year}-`;
};
const parseXML = (XML) => { const parseXML = (XML) => {
const xmlDoc = libxmljs.parseHtml(XML); const xmlDoc = libxmljs.parseHtml(XML);
let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes(); let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes();
let currentTerm = ""; let currentTerm = "";
for (let i = 0; i < newsdefsChildren.length; ++i) { newsdefsChildren.forEach((newsItem) => {
if (newsdefsChildren[i].type() === "element") { if (newsItem.type() === "element") {
const author = newsdefsChildren[i].attr("author").value(); const author = newsItem.attr("author").value();
const date = newsdefsChildren[i].attr("date").value(); const date = newsItem.attr("date").value();
currentTerm = getTerm(date); currentTerm = getTerm(date);
const contentNodes = newsdefsChildren[i].childNodes(); const contentNodes = newsItem.childNodes();
const content = converterShowdown.makeMarkdown( const content = converterShowdown.makeMarkdown(
nodeChildrenToString(contentNodes) nodeChildrenToString(contentNodes)
); );
@ -86,5 +65,5 @@ ${content}`;
} }
); );
} }
} });
}; };