Add version header link and change current docs to be version 'next'

This commit is contained in:
Frank Li 2017-08-04 12:41:13 -07:00
parent 9eb6ff2034
commit 63043c041a
6 changed files with 92 additions and 15 deletions

View file

@ -7,11 +7,20 @@
* of patent rights can be found in the PATENTS file in the same directory. * 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 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 { class LanguageDropDown extends React.Component {
render() { render() {
const enabledLanguages = []; const enabledLanguages = [];
@ -135,6 +144,11 @@ class HeaderNav extends React.Component {
} }
render() { render() {
const versionsLink =
this.props.baseUrl +
(ENABLE_TRANSLATION
? this.props.language + "/versions.html"
: "versions.html");
return ( return (
<div className="fixedHeaderContainer"> <div className="fixedHeaderContainer">
<div className="headerWrapper wrapper"> <div className="headerWrapper wrapper">
@ -146,6 +160,12 @@ class HeaderNav extends React.Component {
{this.props.title} {this.props.title}
</h2>} </h2>}
</a> </a>
{ENABLE_VERSIONING &&
<a href={versionsLink}>
<h3>
{this.props.version || versions[0]}
</h3>
</a>}
{this.renderResponsiveNav()} {this.renderResponsiveNav()}
</header> </header>
</div> </div>

View file

@ -23,8 +23,10 @@ function execute() {
const versionFallback = require("./versionFallback.js"); const versionFallback = require("./versionFallback.js");
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js"); const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
let languages; let languages;
if (fs.existsSync(CWD + "/languages.js")) { if (ENABLE_TRANSLATION) {
languages = require(CWD + "/languages.js"); languages = require(CWD + "/languages.js");
} else { } else {
languages = [ languages = [
@ -84,10 +86,11 @@ function execute() {
const mdToHtml = {}; const mdToHtml = {};
Object.keys(Metadata).forEach(id => { Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id]; const metadata = Metadata[id];
if (metadata.language !== "en" || metadata.version) { if (metadata.language !== "en" || metadata.original_id) {
return; return;
} }
let htmlLink = siteConfig.baseUrl + metadata.permalink; let htmlLink =
siteConfig.baseUrl + metadata.permalink.replace("/next/", "/");
if (htmlLink.includes("/docs/en/")) { if (htmlLink.includes("/docs/en/")) {
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/"); htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
} else { } else {
@ -105,7 +108,7 @@ function execute() {
const metadata = Metadata[id]; const metadata = Metadata[id];
let file; let file;
if (metadata.version) { if (metadata.original_id) {
if (ENABLE_TRANSLATION && metadata.language !== "en") { if (ENABLE_TRANSLATION && metadata.language !== "en") {
file = file =
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source; CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
@ -124,7 +127,7 @@ function execute() {
if (!fs.existsSync(file)) { if (!fs.existsSync(file)) {
return; return;
} }
let rawContent = readMetadata.extractMetadata(fs.readFileSync(file, "utf8")) let rawContent = readMetadata.extractMetadata(fs.readFileSync(file, "utf8"))
.rawContent; .rawContent;
@ -135,13 +138,22 @@ function execute() {
rawContent = insertTableOfContents(rawContent); 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 */ /* replace any links to markdown files to their website html links */
Object.keys(mdToHtml).forEach(function(key, index) { Object.keys(mdToHtml).forEach(function(key, index) {
let link = mdToHtml[key]; let link = mdToHtml[key];
link = link.replace("/en/", "/" + language + "/"); link = link.replace("/en/", "/" + language + "/");
link = link.replace( link = link.replace(
"/VERSION/", "/VERSION/",
metadata.version ? "/" + metadata.version + "/" : "/" metadata.version && (metadata.version !== latestVersion)
? "/" + metadata.version + "/"
: "/"
); );
rawContent = rawContent.replace(new RegExp(key, "g"), link); rawContent = rawContent.replace(new RegExp(key, "g"), link);
}); });

View file

@ -14,7 +14,10 @@ const fs = require("fs");
const os = require("os"); const os = require("os");
const glob = require("glob"); const glob = require("glob");
const siteConfig = require(CWD + "/siteConfig.js"); 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; let languages;
if (fs.existsSync(CWD + "/languages.js")) { if (fs.existsSync(CWD + "/languages.js")) {
languages = require(CWD + "/languages.js"); languages = require(CWD + "/languages.js");
@ -94,6 +97,7 @@ function extractMetadata(content) {
return { metadata, rawContent: both.content }; return { metadata, rawContent: both.content };
} }
// process the metadata for a document found in the docs folder
function processMetadata(file) { function processMetadata(file) {
const result = extractMetadata(fs.readFileSync(file, "utf8")); const result = extractMetadata(fs.readFileSync(file, "utf8"));
if (!result.metadata || !result.rawContent) { if (!result.metadata || !result.rawContent) {
@ -118,6 +122,18 @@ function processMetadata(file) {
metadata.permalink = "docs/" + language + "/" + metadata.id + ".html"; 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 // change ids previous, next
metadata.localized_id = metadata.id; metadata.localized_id = metadata.id;
metadata.id = language + "-" + metadata.id; metadata.id = language + "-" + metadata.id;

View file

@ -24,6 +24,7 @@ function execute(port) {
const CWD = process.cwd(); const CWD = process.cwd();
const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js"); const ENABLE_TRANSLATION = fs.existsSync(CWD + "/languages.js");
const ENABLE_VERSIONING = fs.existsSync(CWD + "/versions.json");
let siteConfig = require(CWD + "/siteConfig.js"); let siteConfig = require(CWD + "/siteConfig.js");
@ -142,10 +143,11 @@ function execute(port) {
const mdToHtml = {}; const mdToHtml = {};
Object.keys(Metadata).forEach(id => { Object.keys(Metadata).forEach(id => {
const metadata = Metadata[id]; const metadata = Metadata[id];
if (metadata.language !== "en" || metadata.version) { if (metadata.language !== "en" || metadata.original_id) {
return; return;
} }
let htmlLink = siteConfig.baseUrl + metadata.permalink; let htmlLink =
siteConfig.baseUrl + metadata.permalink.replace("/next/", "/");
if (htmlLink.includes("/docs/en/")) { if (htmlLink.includes("/docs/en/")) {
htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/"); htmlLink = htmlLink.replace("/docs/en/", "/docs/en/VERSION/");
} else { } else {
@ -158,7 +160,7 @@ function execute(port) {
const language = metadata.language; const language = metadata.language;
let file; let file;
if (metadata.version) { if (metadata.original_id) {
if (ENABLE_TRANSLATION && metadata.language !== "en") { if (ENABLE_TRANSLATION && metadata.language !== "en") {
file = file =
CWD + "/translated_docs/" + metadata.language + "/" + metadata.source; CWD + "/translated_docs/" + metadata.language + "/" + metadata.source;
@ -187,13 +189,22 @@ function execute(port) {
rawContent = insertTableOfContents(rawContent); 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 */ /* replace any links to markdown files to their website html links */
Object.keys(mdToHtml).forEach(function(key, index) { Object.keys(mdToHtml).forEach(function(key, index) {
let link = mdToHtml[key]; let link = mdToHtml[key];
link = link.replace("/en/", "/" + language + "/"); link = link.replace("/en/", "/" + language + "/");
link = link.replace( link = link.replace(
"/VERSION/", "/VERSION/",
metadata.version ? "/" + metadata.version + "/" : "/" metadata.version && (metadata.version !== latestVersion)
? "/" + metadata.version + "/"
: "/"
); );
rawContent = rawContent.replace(new RegExp(key, "g"), link); rawContent = rawContent.replace(new RegExp(key, "g"), link);
}); });

View file

@ -152,12 +152,23 @@ function diffLatestDoc(file, id) {
function processVersionMetadata(file, version, useVersion, language) { function processVersionMetadata(file, version, useVersion, language) {
const metadata = extractMetadata(fs.readFileSync(file, "utf8")).metadata; const metadata = extractMetadata(fs.readFileSync(file, "utf8")).metadata;
metadata.source = "version-" + useVersion + "/" + path.basename(file); metadata.source = "version-" + useVersion + "/" + path.basename(file);
const latestVersion = versions[0];
if (!ENABLE_TRANSLATION && !siteConfig.useEnglishUrl) { if (!ENABLE_TRANSLATION && !siteConfig.useEnglishUrl) {
metadata.permalink = metadata.permalink =
"docs/" + version + "/" + metadata.original_id + ".html"; "docs/" +
(version !== latestVersion ? version + "/" : "") +
metadata.original_id +
".html";
} else { } else {
metadata.permalink = metadata.permalink =
"docs/" + language + "/" + version + "/" + metadata.original_id + ".html"; "docs/" +
language +
"/" +
(version !== latestVersion ? version + "/" : "") +
metadata.original_id +
".html";
} }
metadata.id = metadata.id.replace( metadata.id = metadata.id.replace(
"version-" + useVersion + "-", "version-" + useVersion + "-",

View file

@ -512,6 +512,13 @@ header h2 {
position: relative; position: relative;
z-index: 9999; 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 { .promoSection {
display: flex; display: flex;