diff --git a/lib/core/nav/HeaderNav.js b/lib/core/nav/HeaderNav.js
index bf2b128486..1b6728e687 100644
--- a/lib/core/nav/HeaderNav.js
+++ b/lib/core/nav/HeaderNav.js
@@ -7,11 +7,20 @@
* of patent rights can be found in the PATENTS file in the same directory.
*/
-const React = require("react");
+const CWD = process.cwd();
-const siteConfig = require(process.cwd() + "/siteConfig.js");
+const React = require("react");
+const fs = require("fs");
+const siteConfig = require(CWD + "/siteConfig.js");
const translation = require("../../server/translation.js");
+const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
+const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
+let versions;
+if (ENABLE_VERSIONING) {
+ versions = require(CWD + "/versions.json");
+}
+
class LanguageDropDown extends React.Component {
render() {
const enabledLanguages = [];
@@ -135,6 +144,11 @@ class HeaderNav extends React.Component {
}
render() {
+ const versionsLink =
+ this.props.baseUrl +
+ (ENABLE_TRANSLATION
+ ? this.props.language + "/versions.html"
+ : "versions.html");
return (
diff --git a/lib/server/generate.js b/lib/server/generate.js
index 42b8882738..4a0979f3d7 100644
--- a/lib/server/generate.js
+++ b/lib/server/generate.js
@@ -23,8 +23,10 @@ function execute() {
const versionFallback = require("./versionFallback.js");
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
+ const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
+
let languages;
- if (fs.existsSync(CWD + "/languages.js")) {
+ if (ENABLE_TRANSLATION) {
languages = require(CWD + "/languages.js");
} else {
languages = [
@@ -84,10 +86,11 @@ function execute() {
const mdToHtml = {};
Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id];
- if (metadata.language !== "en" || metadata.version) {
+ if (metadata.language !== "en" || metadata.original_id) {
return;
}
- let htmlLink = siteConfig.baseUrl + metadata.permalink;
+ let htmlLink =
+ siteConfig.baseUrl + metadata.permalink.replace("/next/", "/");
if (htmlLink.includes("/docs/en/")) {
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
} else {
@@ -105,7 +108,7 @@ function execute() {
const metadata = Metadata[id];
let file;
- if (metadata.version) {
+ if (metadata.original_id) {
if (ENABLE_TRANSLATION && metadata.language !== "en") {
file =
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
@@ -124,7 +127,7 @@ function execute() {
if (!fs.existsSync(file)) {
return;
}
-
+
let rawContent = readMetadata.extractMetadata(fs.readFileSync(file, "utf8"))
.rawContent;
@@ -135,13 +138,22 @@ function execute() {
rawContent = insertTableOfContents(rawContent);
}
+ let latestVersion;
+ if (ENABLE_VERSIONING) {
+ latestVersion = JSON.parse(
+ fs.readFileSync(CWD + "/versions.json", "utf8")
+ )[0];
+ }
+
/* 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 + "/" : "/"
+ metadata.version && (metadata.version !== latestVersion)
+ ? "/" + metadata.version + "/"
+ : "/"
);
rawContent = rawContent.replace(new RegExp(key, "g"), link);
});
diff --git a/lib/server/readMetadata.js b/lib/server/readMetadata.js
index 7b7f4614b0..4c816034eb 100644
--- a/lib/server/readMetadata.js
+++ b/lib/server/readMetadata.js
@@ -14,7 +14,10 @@ const fs = require("fs");
const os = require("os");
const glob = require("glob");
const siteConfig = require(CWD + "/siteConfig.js");
-const versionFallback = require("./versionFallback");
+const versionFallback = require("./versionFallback.js");
+
+const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
+
let languages;
if (fs.existsSync(CWD + "/languages.js")) {
languages = require(CWD + "/languages.js");
@@ -94,6 +97,7 @@ function extractMetadata(content) {
return { metadata, rawContent: both.content };
}
+// process the metadata for a document found in the docs folder
function processMetadata(file) {
const result = extractMetadata(fs.readFileSync(file, "utf8"));
if (!result.metadata || !result.rawContent) {
@@ -118,6 +122,18 @@ function processMetadata(file) {
metadata.permalink = "docs/" + language + "/" + metadata.id + ".html";
}
+ if (ENABLE_VERSIONING) {
+ metadata.version = "next";
+ if (languages.length === 1 && !siteConfig.useEnglishUrl) {
+ metadata.permalink = metadata.permalink.replace("docs/", "docs/next/");
+ } else {
+ metadata.permalink = metadata.permalink.replace(
+ "docs/" + language + "/",
+ "docs/" + language + "/next/"
+ );
+ }
+ }
+
// change ids previous, next
metadata.localized_id = metadata.id;
metadata.id = language + "-" + metadata.id;
diff --git a/lib/server/server.js b/lib/server/server.js
index 9ea89fce3a..af810e7af5 100644
--- a/lib/server/server.js
+++ b/lib/server/server.js
@@ -24,6 +24,7 @@ function execute(port) {
const CWD = process.cwd();
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
+ const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
let siteConfig = require(CWD + "/siteConfig.js");
@@ -142,10 +143,11 @@ function execute(port) {
const mdToHtml = {};
Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id];
- if (metadata.language !== "en" || metadata.version) {
+ if (metadata.language !== "en" || metadata.original_id) {
return;
}
- let htmlLink = siteConfig.baseUrl + metadata.permalink;
+ let htmlLink =
+ siteConfig.baseUrl + metadata.permalink.replace("/next/", "/");
if (htmlLink.includes("/docs/en/")) {
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
} else {
@@ -158,7 +160,7 @@ function execute(port) {
const language = metadata.language;
let file;
- if (metadata.version) {
+ if (metadata.original_id) {
if (ENABLE_TRANSLATION && metadata.language !== "en") {
file =
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
@@ -187,13 +189,22 @@ function execute(port) {
rawContent = insertTableOfContents(rawContent);
}
+ let latestVersion;
+ if (ENABLE_VERSIONING) {
+ latestVersion = JSON.parse(
+ fs.readFileSync(CWD + "/versions.json", "utf8")
+ )[0];
+ }
+
/* 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 + "/" : "/"
+ metadata.version && (metadata.version !== latestVersion)
+ ? "/" + metadata.version + "/"
+ : "/"
);
rawContent = rawContent.replace(new RegExp(key, "g"), link);
});
diff --git a/lib/server/versionFallback.js b/lib/server/versionFallback.js
index a902590ac1..5d1de3253d 100644
--- a/lib/server/versionFallback.js
+++ b/lib/server/versionFallback.js
@@ -152,12 +152,23 @@ function diffLatestDoc(file, id) {
function processVersionMetadata(file, version, useVersion, language) {
const metadata = extractMetadata(fs.readFileSync(file, "utf8")).metadata;
metadata.source = "version-" + useVersion + "/" + path.basename(file);
+
+ const latestVersion = versions[0];
+
if (!ENABLE_TRANSLATION && !siteConfig.useEnglishUrl) {
metadata.permalink =
- "docs/" + version + "/" + metadata.original_id + ".html";
+ "docs/" +
+ (version !== latestVersion ? version + "/" : "") +
+ metadata.original_id +
+ ".html";
} else {
metadata.permalink =
- "docs/" + language + "/" + version + "/" + metadata.original_id + ".html";
+ "docs/" +
+ language +
+ "/" +
+ (version !== latestVersion ? version + "/" : "") +
+ metadata.original_id +
+ ".html";
}
metadata.id = metadata.id.replace(
"version-" + useVersion + "-",
diff --git a/lib/static/css/main.css b/lib/static/css/main.css
index 06484bf7d2..2ad07d6d2a 100644
--- a/lib/static/css/main.css
+++ b/lib/static/css/main.css
@@ -512,6 +512,13 @@ header h2 {
position: relative;
z-index: 9999;
}
+.fixedHeaderContainer header h3 {
+ text-decoration: underline;
+ font-family: "Helvetica Neue", Arial, sans-serif;
+ color: white;
+ margin-left: 10px;
+ font-size: 16px;
+}
.promoSection {
display: flex;