mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-10 23:57:22 +02:00
Add versioning functionality
This commit is contained in:
parent
58452ea963
commit
3598dffc58
12 changed files with 568 additions and 132 deletions
|
@ -20,6 +20,9 @@ function execute() {
|
|||
const Site = require("../core/Site.js");
|
||||
const siteConfig = require(CWD + "/siteConfig.js");
|
||||
const translate = require("./translate.js");
|
||||
const versionFallback = require("./versionFallback.js");
|
||||
|
||||
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
|
||||
let languages;
|
||||
if (fs.existsSync(CWD + "/languages.js")) {
|
||||
languages = require(CWD + "/languages.js");
|
||||
|
@ -77,114 +80,86 @@ function execute() {
|
|||
|
||||
readMetadata.generateDocsMetadata();
|
||||
const Metadata = require("../core/metadata.js");
|
||||
let mdToHtml = {};
|
||||
for (let i = 0; i < Metadata.length; i++) {
|
||||
const metadata = Metadata[i];
|
||||
if (metadata.language !== "en") {
|
||||
continue;
|
||||
|
||||
const mdToHtml = {};
|
||||
Object.keys(Metadata).forEach(id => {
|
||||
const metadata = Metadata[id];
|
||||
if (metadata.language !== "en" || metadata.version) {
|
||||
return;
|
||||
}
|
||||
mdToHtml[metadata.source] = siteConfig.baseUrl + metadata.permalink;
|
||||
}
|
||||
let htmlLink = siteConfig.baseUrl + metadata.permalink;
|
||||
if (htmlLink.includes("/docs/en/")) {
|
||||
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
|
||||
} else {
|
||||
htmlLink = htmlLink.replace("/docs/", "/docs/VERSION/");
|
||||
}
|
||||
mdToHtml[metadata.source] = htmlLink;
|
||||
});
|
||||
|
||||
const DocsLayout = require("../core/DocsLayout.js");
|
||||
|
||||
fs.removeSync(CWD + "/build");
|
||||
|
||||
// create html files for all English docs
|
||||
let files = glob.sync(CWD + "/../docs/**");
|
||||
files.forEach(file => {
|
||||
// console.log(file);
|
||||
let language = "en";
|
||||
// create html files for all docs
|
||||
Object.keys(Metadata).forEach(id => {
|
||||
const metadata = Metadata[id];
|
||||
|
||||
const extension = path.extname(file);
|
||||
|
||||
if (extension === ".md" || extension === ".markdown") {
|
||||
const result = readMetadata.processMetadata(file);
|
||||
if (!result) {
|
||||
return;
|
||||
let file;
|
||||
if (metadata.version) {
|
||||
if (ENABLE_TRANSLATION) {
|
||||
file =
|
||||
CWD + "/versioned_docs/" + metadata.language + "/" + metadata.source;
|
||||
} else {
|
||||
file = CWD + "/versioned_docs/" + metadata.source;
|
||||
}
|
||||
|
||||
const metadata = result.metadata;
|
||||
let rawContent = result.rawContent;
|
||||
|
||||
/* generate table of contents if appropriate */
|
||||
if (rawContent && rawContent.indexOf(TABLE_OF_CONTENTS_TOKEN) != -1) {
|
||||
rawContent = insertTableOfContents(rawContent);
|
||||
} else {
|
||||
if (metadata.language === "en") {
|
||||
file = CWD + "/../docs/" + metadata.source;
|
||||
} else {
|
||||
file =
|
||||
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
|
||||
}
|
||||
|
||||
/* 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 + "/")
|
||||
);
|
||||
});
|
||||
|
||||
const docComp = (
|
||||
<DocsLayout metadata={metadata} language={language} config={siteConfig}>
|
||||
{rawContent}
|
||||
</DocsLayout>
|
||||
);
|
||||
const str = renderToStaticMarkup(docComp);
|
||||
|
||||
let targetFile =
|
||||
CWD + "/build/" + siteConfig.projectName + "/" + metadata.permalink;
|
||||
// console.log(targetFile);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
}
|
||||
});
|
||||
if (!fs.existsSync(file)) {
|
||||
return;
|
||||
}
|
||||
let rawContent = readMetadata.extractMetadata(fs.readFileSync(file, "utf8"))
|
||||
.rawContent;
|
||||
|
||||
// create html files for all non-English docs
|
||||
if (languages.length > 1) {
|
||||
files = glob.sync(CWD + "/translated_docs/**");
|
||||
files.forEach(file => {
|
||||
let language = "en";
|
||||
const language = metadata.language;
|
||||
|
||||
const regexSubFolder = /translated_docs\/(.*)\/.*/;
|
||||
const match = regexSubFolder.exec(file);
|
||||
if (match) {
|
||||
language = match[1];
|
||||
}
|
||||
/* generate table of contents if appropriate */
|
||||
if (rawContent && rawContent.indexOf(TABLE_OF_CONTENTS_TOKEN) != -1) {
|
||||
rawContent = insertTableOfContents(rawContent);
|
||||
}
|
||||
|
||||
if (enabledLanguages.indexOf(language) === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const extension = path.extname(file);
|
||||
if (extension !== ".md" && extension !== ".markdown") {
|
||||
return;
|
||||
}
|
||||
|
||||
const result = readMetadata.processMetadata(file);
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
const metadata = result.metadata;
|
||||
let rawContent = result.rawContent;
|
||||
|
||||
/* generate table of contents if appropriate */
|
||||
if (rawContent && rawContent.indexOf(TABLE_OF_CONTENTS_TOKEN) != -1) {
|
||||
rawContent = insertTableOfContents(rawContent);
|
||||
}
|
||||
|
||||
/* 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]);
|
||||
});
|
||||
|
||||
const docComp = (
|
||||
<DocsLayout metadata={metadata} language={language} config={siteConfig}>
|
||||
{rawContent}
|
||||
</DocsLayout>
|
||||
/* replace any links to markdown files to their website html links */
|
||||
Object.keys(mdToHtml).forEach(function(key, index) {
|
||||
let link = mdToHtml[key];
|
||||
link = link.replace("/en/", "/" + language + "/");
|
||||
link = link.replace(
|
||||
"/VERSION/",
|
||||
metadata.version ? "/" + metadata.version + "/" : "/"
|
||||
);
|
||||
const str = renderToStaticMarkup(docComp);
|
||||
let targetFile =
|
||||
CWD + "/build/" + siteConfig.projectName + "/" + metadata.permalink;
|
||||
// console.log(targetFile);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
rawContent = rawContent.replace(new RegExp(key, "g"), link);
|
||||
});
|
||||
}
|
||||
|
||||
rawContent = rawContent.replace(
|
||||
/\]\(assets\//g,
|
||||
"](" + siteConfig.baseUrl + "docs/assets/"
|
||||
);
|
||||
|
||||
const docComp = (
|
||||
<DocsLayout metadata={metadata} language={language} config={siteConfig}>
|
||||
{rawContent}
|
||||
</DocsLayout>
|
||||
);
|
||||
const str = renderToStaticMarkup(docComp);
|
||||
const targetFile =
|
||||
CWD + "/build/" + siteConfig.projectName + "/" + metadata.permalink;
|
||||
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
});
|
||||
|
||||
/* copy docs assets if they exist */
|
||||
if (fs.existsSync(CWD + "/../docs/assets")) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue