Add versioning functionality

This commit is contained in:
Frank Li 2017-08-03 10:25:01 -07:00
parent 58452ea963
commit 3598dffc58
12 changed files with 568 additions and 132 deletions

View file

@ -20,6 +20,7 @@ function execute(port) {
const mkdirp = require("mkdirp");
const glob = require("glob");
const translate = require("./translate.js");
const versionFallback = require("./versionFallback");
const CWD = process.cwd();
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
@ -127,37 +128,59 @@ function execute(port) {
purgeCache(CWD + "/siteConfig.js");
siteConfig = require(CWD + "/siteConfig.js");
let url = req.path.toString().replace(siteConfig.baseUrl, "");
reloadMetadata();
// links is a map from a permalink to an id
let links = {};
for (let i = 0; i < Metadata.length; i++) {
const metadata = Metadata[i];
if (metadata.language === "en") {
links[metadata.permalink] = CWD + "/../docs/" + metadata.source;
Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id];
links[metadata.permalink] = id;
});
const mdToHtml = {};
Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id];
if (metadata.language !== "en" || metadata.version) {
return;
}
let htmlLink = siteConfig.baseUrl + metadata.permalink;
if (htmlLink.includes("/docs/en/")) {
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
} else {
links[metadata.permalink] =
htmlLink = htmlLink.replace("/docs/", "/docs/VERSION/");
}
mdToHtml[metadata.source] = htmlLink;
});
const metadata = Metadata[links[url]];
const language = metadata.language;
let file;
if (metadata.version) {
if (ENABLE_TRANSLATION) {
file =
CWD + "/versioned_docs/" + metadata.language + "/" + metadata.source;
} else {
file = CWD + "/versioned_docs/" + metadata.source;
}
} else {
if (metadata.language === "en") {
file = CWD + "/../docs/" + metadata.source;
} else {
file =
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
}
}
let mdToHtml = {};
for (let i = 0; i < Metadata.length; i++) {
const metadata = Metadata[i];
if (metadata.language !== "en") {
continue;
}
mdToHtml[metadata.source] = siteConfig.baseUrl + metadata.permalink;
}
let file = links[req.path.toString().replace(siteConfig.baseUrl, "")];
if (!fs.existsSync(file)) {
next();
return;
}
const result = readMetadata.processMetadata(file);
const metadata = result.metadata;
const language = metadata.language;
let rawContent = result.rawContent;
let rawContent = readMetadata.extractMetadata(fs.readFileSync(file, "utf8"))
.rawContent;
/* generate table of contents if appropriate */
if (rawContent && rawContent.indexOf(TABLE_OF_CONTENTS_TOKEN) !== -1) {
@ -166,10 +189,13 @@ function execute(port) {
/* replace any links to markdown files to their website html links */
Object.keys(mdToHtml).forEach(function(key, index) {
rawContent = rawContent.replace(
new RegExp(key, "g"),
mdToHtml[key].replace("/en/", "/" + language + "/")
let link = mdToHtml[key];
link = link.replace("/en/", "/" + language + "/");
link = link.replace(
"/VERSION/",
metadata.version ? "/" + metadata.version + "/" : "/"
);
rawContent = rawContent.replace(new RegExp(key, "g"), link);
});
rawContent = rawContent.replace(
@ -187,6 +213,7 @@ function execute(port) {
res.send(renderToStaticMarkup(docComp));
});
/* handle all requests for blog pages and posts */
app.get(/blog\/.*html$/, (req, res) => {
purgeCache(CWD + "/siteConfig.js");