old-website/scripts/mdx-scripts/news-conversion.js

91 lines
2.4 KiB
JavaScript

const fs = require("fs");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM("");
global.window = window;
var showdown = require("showdown");
const converterShowdown = new showdown.Converter();
const libxmljs = require("libxmljs");
fs.readFile("./news.xml", "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
parseXML(data);
});
fs.mkdir("./markdown-news/", { recursive: true }, (err) => {
if (err) throw err;
});
const nodeChildrenToString = (nodeChildren) => {
let string = "";
for (let i = 0; i < nodeChildren.length; ++i) {
if (nodeChildren[i].type() === "text") {
string += nodeChildren[i];
} else {
string += nodeChildren[i].toString();
}
}
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();
currentTerm = getTerm(date);
const contentNodes = newsdefsChildren[i].childNodes();
const content = converterShowdown.makeMarkdown(
nodeChildrenToString(contentNodes)
);
const mdx = `export const metadata = {
author: ${author},
date: new Date("${date}"),
}
${content}`;
const mdxTitle = `${date}-${author}`;
fs.mkdir(`./markdown-news/${currentTerm}`, { recursive: true }, (err) => {
if (err) throw err;
});
fs.writeFile(
`./markdown-news/${currentTerm}/${mdxTitle}.news.mdx`,
mdx,
(err) => {
if (err) throw err;
}
);
}
}
};