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");
const converterShowdown = new showdown.Converter();
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) {
console.error(err);
return;
}
data = data.replace(/<!DOCTYPE.*>/, "");
parseXML(data);
});
@ -41,6 +43,8 @@ const parseTime = (dateStr, timeStr) => {
return date;
};
const nodeChildrenToString = (nodeChildren) => {
let string = "";
for (let i = 0; i < nodeChildren.length; ++i) {
@ -56,54 +60,36 @@ const nodeChildrenToString = (nodeChildren) => {
const parseXML = (XML) => {
const xmlDoc = libxmljs.parseHtml(XML);
let eventdefsChildren = xmlDoc.get("//eventdefs").childNodes();
let currentTerm = "";
for (let i = 0; i < eventdefsChildren.length; ++i) {
eventdefsChildren.forEach((eventItem) => {
// sometimes there's events that are commented out, hopefully this catches that
if (
eventdefsChildren[i].type() === "comment" &&
/((winter)|(fall)|(spring))/.exec(
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();
if (eventItem.type() === "element") {
const title = eventItem.attr("title").value();
const shortNodes = eventItem.get(".//short").childNodes();
let short = converterShowdown.makeMarkdown(
nodeChildrenToString(shortNodes)
);
// remove newlines from short
short = short.replace(/\n/g, "");
const dateStr = eventdefsChildren[i].attr("date").value();
const timeStr = eventdefsChildren[i].attr("time").value();
const dateStr = eventItem.attr("date").value();
const timeStr = eventItem.attr("time").value();
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;
let abstract = short;
if (eventdefsChildren[i].get(".//abstract") !== undefined) {
const abstractNodes = eventdefsChildren[i]
.get(".//abstract")
.childNodes();
if (eventItem.get(".//abstract") !== undefined) {
const abstractNodes = eventItem.get(".//abstract").childNodes();
abstract = converterShowdown.makeMarkdown(
nodeChildrenToString(abstractNodes)
);
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 = {
name: "${title}",
short: "${short}",
date: new Date("${date.toString()}"),
online: ${online},
location: "${location}",${registerLink}
location: "${location}",
}
${abstract}`;
@ -127,5 +113,5 @@ ${abstract}`;
}
);
}
}
});
};

View File

@ -1,5 +1,6 @@
<?xml version='1.0'?>
<!DOCTYPE eventdefs SYSTEM "csc.dtd" [<!ENTITY mdash "&#x2014;">]>
<eventdefs>
<!-- Fall 2016 -->
<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">
<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");
const converterShowdown = new showdown.Converter();
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) {
console.error(err);
return;
}
data = data.replace(/<!DOCTYPE.*>/, "");
parseXML(data);
});
@ -31,39 +33,16 @@ const nodeChildrenToString = (nodeChildren) => {
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 xmlDoc = libxmljs.parseHtml(XML);
let newsdefsChildren = xmlDoc.get("//newsdefs").childNodes();
let currentTerm = "";
for (let i = 0; i < newsdefsChildren.length; ++i) {
if (newsdefsChildren[i].type() === "element") {
const author = newsdefsChildren[i].attr("author").value();
const date = newsdefsChildren[i].attr("date").value();
newsdefsChildren.forEach((newsItem) => {
if (newsItem.type() === "element") {
const author = newsItem.attr("author").value();
const date = newsItem.attr("date").value();
currentTerm = getTerm(date);
const contentNodes = newsdefsChildren[i].childNodes();
const contentNodes = newsItem.childNodes();
const content = converterShowdown.makeMarkdown(
nodeChildrenToString(contentNodes)
);
@ -86,5 +65,5 @@ ${content}`;
}
);
}
}
});
};