mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-20 20:46:58 +02:00
Revert "Fixing Issue 305 - broken links because of language (#316)"
This reverts commit 7dc6c6c2da
.
This commit is contained in:
parent
7dc6c6c2da
commit
18c9a2ab31
7 changed files with 163 additions and 161 deletions
|
@ -8,16 +8,6 @@
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
|
|
||||||
class Footer extends React.Component {
|
class Footer extends React.Component {
|
||||||
docUrl(doc, language) {
|
|
||||||
const baseUrl = this.props.config.baseUrl;
|
|
||||||
return baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
|
|
||||||
}
|
|
||||||
|
|
||||||
pageUrl(doc, language) {
|
|
||||||
const baseUrl = this.props.config.baseUrl;
|
|
||||||
return baseUrl + (language ? language + '/' : '') + doc;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
return (
|
return (
|
||||||
|
@ -35,19 +25,40 @@ class Footer extends React.Component {
|
||||||
</a>
|
</a>
|
||||||
<div>
|
<div>
|
||||||
<h5>Docs</h5>
|
<h5>Docs</h5>
|
||||||
<a href={this.docUrl('doc1.html', this.props.language)}>
|
<a
|
||||||
|
href={
|
||||||
|
this.props.config.baseUrl +
|
||||||
|
'docs/' +
|
||||||
|
this.props.language +
|
||||||
|
'/doc1.html'
|
||||||
|
}>
|
||||||
Getting Started (or other categories)
|
Getting Started (or other categories)
|
||||||
</a>
|
</a>
|
||||||
<a href={this.docUrl('doc2.html', this.props.language)}>
|
<a
|
||||||
|
href={
|
||||||
|
this.props.config.baseUrl +
|
||||||
|
'docs/' +
|
||||||
|
this.props.language +
|
||||||
|
'/doc2.html'
|
||||||
|
}>
|
||||||
Guides (or other categories)
|
Guides (or other categories)
|
||||||
</a>
|
</a>
|
||||||
<a href={this.docUrl('doc3.html', this.props.language)}>
|
<a
|
||||||
|
href={
|
||||||
|
this.props.config.baseUrl +
|
||||||
|
'docs/' +
|
||||||
|
this.props.language +
|
||||||
|
'/doc3.html'
|
||||||
|
}>
|
||||||
API Reference (or other categories)
|
API Reference (or other categories)
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h5>Community</h5>
|
<h5>Community</h5>
|
||||||
<a href={this.pageUrl('users.html', this.props.language)}>
|
<a
|
||||||
|
href={
|
||||||
|
this.props.config.baseUrl + this.props.language + '/users.html'
|
||||||
|
}>
|
||||||
User Showcase
|
User Showcase
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
|
|
|
@ -19,11 +19,11 @@ function imgUrl(img) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function docUrl(doc, language) {
|
function docUrl(doc, language) {
|
||||||
return siteConfig.baseUrl + 'docs/' + (language ? language + '/' : '') + doc;
|
return siteConfig.baseUrl + 'docs/' + language + '/' + doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
function pageUrl(page, language) {
|
function pageUrl(page, language) {
|
||||||
return siteConfig.baseUrl + (language ? language + '/' : '') + page;
|
return siteConfig.baseUrl + language + '/' + page;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Button extends React.Component {
|
class Button extends React.Component {
|
||||||
|
@ -73,7 +73,7 @@ const PromoSection = props => (
|
||||||
|
|
||||||
class HomeSplash extends React.Component {
|
class HomeSplash extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
let language = this.props.language || '';
|
let language = this.props.language || 'en';
|
||||||
return (
|
return (
|
||||||
<SplashContainer>
|
<SplashContainer>
|
||||||
<Logo img_src={imgUrl('docusaurus.svg')} />
|
<Logo img_src={imgUrl('docusaurus.svg')} />
|
||||||
|
|
|
@ -11,11 +11,16 @@ const React = require('react');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const siteConfig = require(CWD + '/siteConfig.js');
|
const siteConfig = require(CWD + '/siteConfig.js');
|
||||||
const translation = require('../../server/translation.js');
|
const translation = require('../../server/translation.js');
|
||||||
const env = require('../../server/env.js');
|
|
||||||
|
|
||||||
const translate = require('../../server/translate.js').translate;
|
const translate = require('../../server/translate.js').translate;
|
||||||
const setLanguage = require('../../server/translate.js').setLanguage;
|
const setLanguage = require('../../server/translate.js').setLanguage;
|
||||||
|
|
||||||
|
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');
|
||||||
|
}
|
||||||
const readMetadata = require('../../server/readMetadata.js');
|
const readMetadata = require('../../server/readMetadata.js');
|
||||||
readMetadata.generateMetadataDocs();
|
readMetadata.generateMetadataDocs();
|
||||||
const Metadata = require('../metadata.js');
|
const Metadata = require('../metadata.js');
|
||||||
|
@ -23,24 +28,26 @@ const Metadata = require('../metadata.js');
|
||||||
// language dropdown nav item for when translations are enabled
|
// language dropdown nav item for when translations are enabled
|
||||||
class LanguageDropDown extends React.Component {
|
class LanguageDropDown extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
if (!env.translation.enabled) {
|
const enabledLanguages = [];
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let currentLanguage = 'English';
|
let currentLanguage = 'English';
|
||||||
setLanguage(this.props.language);
|
setLanguage(this.props.language);
|
||||||
let helpTranslateString = translate(
|
let helpTranslateString = translate(
|
||||||
'Help Translate|recruit community translators for your project'
|
'Help Translate|recruit community translators for your project'
|
||||||
);
|
);
|
||||||
// add all enabled languages to dropdown
|
// add all enabled languages to dropdown
|
||||||
const enabledLanguages = env.translation
|
translation['languages'].map(lang => {
|
||||||
.enabledLanguages()
|
if (lang.tag == this.props.language) {
|
||||||
.filter(lang => lang !== this.props.language)
|
currentLanguage = lang.name;
|
||||||
.map(lang => (
|
}
|
||||||
|
if (lang.tag == this.props.language) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
enabledLanguages.push(
|
||||||
<li key={lang.tag}>
|
<li key={lang.tag}>
|
||||||
<a href={siteConfig.baseUrl + lang.tag}>{lang.name}</a>
|
<a href={siteConfig.baseUrl + lang.tag}>{lang.name}</a>
|
||||||
</li>
|
</li>
|
||||||
));
|
);
|
||||||
|
});
|
||||||
// if no languages are enabled besides English, return null
|
// if no languages are enabled besides English, return null
|
||||||
if (enabledLanguages.length < 1) {
|
if (enabledLanguages.length < 1) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -119,14 +126,17 @@ class HeaderNav extends React.Component {
|
||||||
);
|
);
|
||||||
} else if (link.doc) {
|
} else if (link.doc) {
|
||||||
// set link to document with current page's language/version
|
// set link to document with current page's language/version
|
||||||
const langPart = env.translation.enabled ? this.props.language + '-' : '';
|
let id;
|
||||||
const versionPart =
|
if (!ENABLE_VERSIONING || this.props.version === 'next') {
|
||||||
env.translation.enabled && this.props.version !== 'next'
|
id = this.props.language + '-' + link.doc;
|
||||||
? '-version-' +
|
} else {
|
||||||
(this.props.version || env.versioning.latestVersion) +
|
id =
|
||||||
'-'
|
this.props.language +
|
||||||
: '';
|
'-version-' +
|
||||||
const id = langPart + versionPart + link.doc;
|
(this.props.version || versions[0]) +
|
||||||
|
'-' +
|
||||||
|
link.doc;
|
||||||
|
}
|
||||||
if (!Metadata[id]) {
|
if (!Metadata[id]) {
|
||||||
if (id != link.doc) {
|
if (id != link.doc) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -143,13 +153,9 @@ class HeaderNav extends React.Component {
|
||||||
href = this.props.config.baseUrl + Metadata[id].permalink;
|
href = this.props.config.baseUrl + Metadata[id].permalink;
|
||||||
} else if (link.page) {
|
} else if (link.page) {
|
||||||
// set link to page with current page's language if appropriate
|
// set link to page with current page's language if appropriate
|
||||||
const language = this.props.language || '';
|
|
||||||
if (fs.existsSync(CWD + '/pages/en/' + link.page + '.js')) {
|
if (fs.existsSync(CWD + '/pages/en/' + link.page + '.js')) {
|
||||||
href =
|
href =
|
||||||
siteConfig.baseUrl +
|
siteConfig.baseUrl + this.props.language + '/' + link.page + '.html';
|
||||||
(language ? language + '/' : '') +
|
|
||||||
link.page +
|
|
||||||
'.html';
|
|
||||||
} else {
|
} else {
|
||||||
href = siteConfig.baseUrl + link.page + '.html';
|
href = siteConfig.baseUrl + link.page + '.html';
|
||||||
}
|
}
|
||||||
|
@ -174,7 +180,7 @@ class HeaderNav extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
const versionsLink =
|
const versionsLink =
|
||||||
this.props.baseUrl +
|
this.props.baseUrl +
|
||||||
(env.translation.enabled
|
(ENABLE_TRANSLATION
|
||||||
? this.props.language + '/versions.html'
|
? this.props.language + '/versions.html'
|
||||||
: 'versions.html');
|
: 'versions.html');
|
||||||
return (
|
return (
|
||||||
|
@ -192,9 +198,9 @@ class HeaderNav extends React.Component {
|
||||||
<h2 className="headerTitle">{this.props.title}</h2>
|
<h2 className="headerTitle">{this.props.title}</h2>
|
||||||
)}
|
)}
|
||||||
</a>
|
</a>
|
||||||
{env.versioning.enabled && (
|
{ENABLE_VERSIONING && (
|
||||||
<a href={versionsLink}>
|
<a href={versionsLink}>
|
||||||
<h3>{this.props.version || env.versioning.latestVersion}</h3>
|
<h3>{this.props.version || versions[0]}</h3>
|
||||||
</a>
|
</a>
|
||||||
)}
|
)}
|
||||||
{this.renderResponsiveNav()}
|
{this.renderResponsiveNav()}
|
||||||
|
|
|
@ -1,68 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (c) 2017-present, Facebook, Inc.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const CWD = process.cwd();
|
|
||||||
const fs = require('fs-extra');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const join = path.join;
|
|
||||||
|
|
||||||
const languages_js = join(CWD, 'lanauages.js');
|
|
||||||
const translation_js = join(CWD, 'translation.js');
|
|
||||||
const versions_json = join(CWD, 'versions.json');
|
|
||||||
|
|
||||||
class Translation {
|
|
||||||
constructor() {
|
|
||||||
this.enabled = false;
|
|
||||||
this.languages = [
|
|
||||||
{
|
|
||||||
enabled: true,
|
|
||||||
name: 'English',
|
|
||||||
tag: 'en',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
this._load();
|
|
||||||
}
|
|
||||||
|
|
||||||
enabledLanguages() {
|
|
||||||
return this.languages.filter(lang => lang.enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
_load() {
|
|
||||||
if (fs.existsSync(languages_js)) {
|
|
||||||
this.enabled = true;
|
|
||||||
this.languages = require(language_js);
|
|
||||||
this.translation = require(translation_js);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Versioning {
|
|
||||||
constructor() {
|
|
||||||
this.enabled = false;
|
|
||||||
this.latestVersion = null;
|
|
||||||
this.versions = [];
|
|
||||||
|
|
||||||
this._load();
|
|
||||||
}
|
|
||||||
|
|
||||||
_load() {
|
|
||||||
if (fs.existsSync(versions_json)) {
|
|
||||||
this.enabled = true;
|
|
||||||
this.versions = JSON.parse(fs.readFileSync(versions_json, 'utf8'));
|
|
||||||
this.latestVersion = this.versions[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const env = {
|
|
||||||
translation: new Translation(),
|
|
||||||
versioning: new Versioning(),
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = env;
|
|
|
@ -20,15 +20,30 @@ function execute() {
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const Site = require('../core/Site.js');
|
const Site = require('../core/Site.js');
|
||||||
const env = require('./env.js');
|
|
||||||
const siteConfig = require(CWD + '/siteConfig.js');
|
const siteConfig = require(CWD + '/siteConfig.js');
|
||||||
const translate = require('./translate.js');
|
const translate = require('./translate.js');
|
||||||
|
const versionFallback = require('./versionFallback.js');
|
||||||
|
|
||||||
const feed = require('./feed.js');
|
const feed = require('./feed.js');
|
||||||
const sitemap = require('./sitemap.js');
|
const sitemap = require('./sitemap.js');
|
||||||
|
|
||||||
const join = path.join;
|
const join = path.join;
|
||||||
|
|
||||||
|
const ENABLE_TRANSLATION = fs.existsSync(join(CWD, 'languages.js'));
|
||||||
|
const ENABLE_VERSIONING = fs.existsSync(join(CWD, 'versions.json'));
|
||||||
|
|
||||||
|
let languages;
|
||||||
|
if (ENABLE_TRANSLATION) {
|
||||||
|
languages = require(CWD + '/languages.js');
|
||||||
|
} else {
|
||||||
|
languages = [
|
||||||
|
{
|
||||||
|
enabled: true,
|
||||||
|
name: 'English',
|
||||||
|
tag: 'en',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
// create the folder path for a file if it does not exist, then write the file
|
// create the folder path for a file if it does not exist, then write the file
|
||||||
function writeFileAndCreateFolder(file, content) {
|
function writeFileAndCreateFolder(file, content) {
|
||||||
mkdirp.sync(file.replace(new RegExp('/[^/]*$'), ''));
|
mkdirp.sync(file.replace(new RegExp('/[^/]*$'), ''));
|
||||||
|
@ -72,9 +87,10 @@ function execute() {
|
||||||
console.log('generate.js triggered...');
|
console.log('generate.js triggered...');
|
||||||
|
|
||||||
// array of tags of enabled languages
|
// array of tags of enabled languages
|
||||||
const enabledLanguages = env.translation
|
const enabledLanguages = [];
|
||||||
.enabledLanguages()
|
languages.filter(lang => lang.enabled).map(lang => {
|
||||||
.map(lang => lang.tag);
|
enabledLanguages.push(lang.tag);
|
||||||
|
});
|
||||||
|
|
||||||
readMetadata.generateMetadataDocs();
|
readMetadata.generateMetadataDocs();
|
||||||
const Metadata = require('../core/metadata.js');
|
const Metadata = require('../core/metadata.js');
|
||||||
|
@ -118,7 +134,7 @@ function execute() {
|
||||||
// determine what file to use according to its id
|
// determine what file to use according to its id
|
||||||
let file;
|
let file;
|
||||||
if (metadata.original_id) {
|
if (metadata.original_id) {
|
||||||
if (env.translation.enabled && metadata.language !== 'en') {
|
if (ENABLE_TRANSLATION && metadata.language !== 'en') {
|
||||||
file = join(CWD, 'translated_docs', metadata.language, metadata.source);
|
file = join(CWD, 'translated_docs', metadata.language, metadata.source);
|
||||||
} else {
|
} else {
|
||||||
file = join(CWD, 'versioned_docs', metadata.source);
|
file = join(CWD, 'versioned_docs', metadata.source);
|
||||||
|
@ -145,7 +161,12 @@ function execute() {
|
||||||
rawContent = insertTableOfContents(rawContent);
|
rawContent = insertTableOfContents(rawContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
let latestVersion = env.versioning.latestVersion;
|
let latestVersion;
|
||||||
|
if (ENABLE_VERSIONING) {
|
||||||
|
latestVersion = JSON.parse(
|
||||||
|
fs.readFileSync(join(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) {
|
||||||
|
@ -186,10 +207,7 @@ function execute() {
|
||||||
writeFileAndCreateFolder(targetFile, str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
|
|
||||||
// generate english page redirects when languages are enabled
|
// generate english page redirects when languages are enabled
|
||||||
if (
|
if (ENABLE_TRANSLATION && metadata.permalink.indexOf('docs/en') !== -1) {
|
||||||
env.translation.enabled &&
|
|
||||||
metadata.permalink.indexOf('docs/en') !== -1
|
|
||||||
) {
|
|
||||||
const redirectComp = (
|
const redirectComp = (
|
||||||
<Redirect
|
<Redirect
|
||||||
metadata={metadata}
|
metadata={metadata}
|
||||||
|
@ -425,25 +443,21 @@ function execute() {
|
||||||
str
|
str
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write to base level
|
|
||||||
let language = '';
|
|
||||||
const str = renderToStaticMarkup(
|
|
||||||
<Site language={language} config={siteConfig}>
|
|
||||||
<ReactComp language={language} />
|
|
||||||
</Site>
|
|
||||||
);
|
|
||||||
writeFileAndCreateFolder(targetFile.replace('/en/', '/'), str);
|
|
||||||
} else {
|
} else {
|
||||||
// allow for rendering of other files not in pages/en folder
|
// allow for rendering of other files not in pages/en folder
|
||||||
let language = '';
|
let language = 'en';
|
||||||
|
for (let i = 0; i < langParts.length; i++) {
|
||||||
|
if (enabledLanguages.indexOf(langParts[i]) !== -1) {
|
||||||
|
language = langParts[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
translate.setLanguage(language);
|
translate.setLanguage(language);
|
||||||
const str = renderToStaticMarkup(
|
const str = renderToStaticMarkup(
|
||||||
<Site language={language} config={siteConfig}>
|
<Site language={language} config={siteConfig}>
|
||||||
<ReactComp language={language} />
|
<ReactComp language={language} />
|
||||||
</Site>
|
</Site>
|
||||||
);
|
);
|
||||||
writeFileAndCreateFolder(targetFile.replace('/en/', '/'), str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
}
|
}
|
||||||
fs.removeSync(tempFile);
|
fs.removeSync(tempFile);
|
||||||
} else if (!fs.lstatSync(file).isDirectory()) {
|
} else if (!fs.lstatSync(file).isDirectory()) {
|
||||||
|
@ -455,6 +469,15 @@ function execute() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// copy html files in 'en' to base level as well
|
||||||
|
files = glob.sync(join(buildDir, 'en', '**'));
|
||||||
|
files.forEach(file => {
|
||||||
|
let targetFile = file.replace(join(buildDir, 'en'), join(buildDir));
|
||||||
|
if (file.match(/\.html$/)) {
|
||||||
|
fs.copySync(file, targetFile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Generate CNAME file if a custom domain is specified in siteConfig
|
// Generate CNAME file if a custom domain is specified in siteConfig
|
||||||
if (siteConfig.cname) {
|
if (siteConfig.cname) {
|
||||||
let targetFile = join(buildDir, 'CNAME');
|
let targetFile = join(buildDir, 'CNAME');
|
||||||
|
|
|
@ -11,12 +11,25 @@ const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
|
|
||||||
const env = require('./env');
|
|
||||||
const siteConfig = require(CWD + '/siteConfig.js');
|
const siteConfig = require(CWD + '/siteConfig.js');
|
||||||
const versionFallback = require('./versionFallback.js');
|
const versionFallback = require('./versionFallback.js');
|
||||||
const escapeStringRegexp = require('escape-string-regexp');
|
const escapeStringRegexp = require('escape-string-regexp');
|
||||||
|
|
||||||
|
const ENABLE_VERSIONING = fs.existsSync(CWD + '/versions.json');
|
||||||
|
|
||||||
|
let languages;
|
||||||
|
if (fs.existsSync(CWD + '/languages.js')) {
|
||||||
|
languages = require(CWD + '/languages.js');
|
||||||
|
} else {
|
||||||
|
languages = [
|
||||||
|
{
|
||||||
|
enabled: true,
|
||||||
|
name: 'English',
|
||||||
|
tag: 'en',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
// Can have a custom docs path. Top level folder still needs to be in directory
|
// Can have a custom docs path. Top level folder still needs to be in directory
|
||||||
// at the same level as `website`, not inside `website`.
|
// at the same level as `website`, not inside `website`.
|
||||||
// e.g., docs/whereDocsReallyExist
|
// e.g., docs/whereDocsReallyExist
|
||||||
|
@ -116,8 +129,11 @@ function processMetadata(file) {
|
||||||
'/' + escapeStringRegexp(getDocsPath()) + '/(.*)/.*/'
|
'/' + escapeStringRegexp(getDocsPath()) + '/(.*)/.*/'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let language = 'en';
|
||||||
const match = regexSubFolder.exec(file);
|
const match = regexSubFolder.exec(file);
|
||||||
let language = match ? match[1] : 'en';
|
if (match) {
|
||||||
|
language = match[1];
|
||||||
|
}
|
||||||
|
|
||||||
const metadata = result.metadata;
|
const metadata = result.metadata;
|
||||||
const rawContent = result.rawContent;
|
const rawContent = result.rawContent;
|
||||||
|
@ -133,20 +149,28 @@ function processMetadata(file) {
|
||||||
metadata.title = metadata.id;
|
metadata.title = metadata.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
const langPart =
|
if (languages.length === 1 && !siteConfig.useEnglishUrl) {
|
||||||
env.translation.enabled || siteConfig.useEnglishUrl ? language + '/' : '';
|
metadata.permalink = 'docs/' + metadata.id + '.html';
|
||||||
let versionPart = '';
|
} else {
|
||||||
if (env.versioning.enabled) {
|
metadata.permalink = 'docs/' + language + '/' + metadata.id + '.html';
|
||||||
metadata.version = 'next';
|
|
||||||
versionPart = 'next/';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata.permalink = 'docs/' + langPart + versionPart + 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 = (env.translation.enabled ? language + '-' : '') + metadata.id;
|
metadata.id = language + '-' + metadata.id;
|
||||||
metadata.language = env.translation.enabled ? language : 'en';
|
metadata.language = language;
|
||||||
|
|
||||||
const order = readSidebar();
|
const order = readSidebar();
|
||||||
const id = metadata.localized_id;
|
const id = metadata.localized_id;
|
||||||
|
@ -157,13 +181,11 @@ function processMetadata(file) {
|
||||||
|
|
||||||
if (order[id].next) {
|
if (order[id].next) {
|
||||||
metadata.next_id = order[id].next;
|
metadata.next_id = order[id].next;
|
||||||
metadata.next =
|
metadata.next = language + '-' + order[id].next;
|
||||||
(env.translation.enabled ? language + '-' : '') + order[id].next;
|
|
||||||
}
|
}
|
||||||
if (order[id].previous) {
|
if (order[id].previous) {
|
||||||
metadata.previous_id = order[id].previous;
|
metadata.previous_id = order[id].previous;
|
||||||
metadata.previous =
|
metadata.previous = language + '-' + order[id].previous;
|
||||||
(env.translation.enabled ? language + '-' : '') + order[id].previous;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,9 +204,10 @@ function generateMetadataDocs() {
|
||||||
|
|
||||||
const regexSubFolder = /translated_docs\/(.*)\/.*/;
|
const regexSubFolder = /translated_docs\/(.*)\/.*/;
|
||||||
|
|
||||||
const enabledLanguages = env.translation
|
const enabledLanguages = [];
|
||||||
.enabledLanguages()
|
languages.filter(lang => lang.enabled).map(lang => {
|
||||||
.map(language => language.tag);
|
enabledLanguages.push(lang.tag);
|
||||||
|
});
|
||||||
|
|
||||||
const metadatas = {};
|
const metadatas = {};
|
||||||
const defaultMetadatas = {};
|
const defaultMetadatas = {};
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
function execute(port) {
|
function execute(port) {
|
||||||
const extractTranslations = require('../write-translations.js');
|
const extractTranslations = require('../write-translations.js');
|
||||||
|
|
||||||
const env = require('./env.js');
|
|
||||||
const translation = require('./translation.js');
|
const translation = require('./translation.js');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
|
@ -24,12 +23,15 @@ function execute(port) {
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const translate = require('./translate.js');
|
const translate = require('./translate.js');
|
||||||
|
const versionFallback = require('./versionFallback');
|
||||||
|
|
||||||
const feed = require('./feed.js');
|
const feed = require('./feed.js');
|
||||||
const sitemap = require('./sitemap.js');
|
const sitemap = require('./sitemap.js');
|
||||||
// const sitemap = require("sitemap");
|
// const sitemap = require("sitemap");
|
||||||
|
|
||||||
const CWD = process.cwd();
|
const CWD = process.cwd();
|
||||||
|
const ENABLE_TRANSLATION = fs.existsSync(CWD + '/languages.js');
|
||||||
|
const ENABLE_VERSIONING = fs.existsSync(CWD + '/versions.json');
|
||||||
|
|
||||||
// remove a module and child modules from require cache, so server does not have
|
// remove a module and child modules from require cache, so server does not have
|
||||||
// to be restarted
|
// to be restarted
|
||||||
|
@ -166,14 +168,14 @@ function execute(port) {
|
||||||
// determine what file to use according to its id
|
// determine what file to use according to its id
|
||||||
let file;
|
let file;
|
||||||
if (metadata.original_id) {
|
if (metadata.original_id) {
|
||||||
if (env.translation.enabled && 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;
|
||||||
} else {
|
} else {
|
||||||
file = CWD + '/versioned_docs/' + metadata.source;
|
file = CWD + '/versioned_docs/' + metadata.source;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!env.translation.enabled || metadata.language === 'en') {
|
if (metadata.language === 'en') {
|
||||||
file =
|
file =
|
||||||
CWD + '/../' + readMetadata.getDocsPath() + '/' + metadata.source;
|
CWD + '/../' + readMetadata.getDocsPath() + '/' + metadata.source;
|
||||||
} else {
|
} else {
|
||||||
|
@ -195,7 +197,12 @@ function execute(port) {
|
||||||
rawContent = insertTableOfContents(rawContent);
|
rawContent = insertTableOfContents(rawContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
let latestVersion = env.latestVersion;
|
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) {
|
||||||
|
@ -376,21 +383,21 @@ function execute(port) {
|
||||||
file = file.replace(siteConfig.baseUrl, '');
|
file = file.replace(siteConfig.baseUrl, '');
|
||||||
let userFile = CWD + '/pages/' + file;
|
let userFile = CWD + '/pages/' + file;
|
||||||
|
|
||||||
let language = '';
|
let language = 'en';
|
||||||
const regexLang = /(.*)\/.*\.html$/;
|
const regexLang = /(.*)\/.*\.html$/;
|
||||||
const match = regexLang.exec(req.path);
|
const match = regexLang.exec(req.path);
|
||||||
const parts = match[1].split('/');
|
const parts = match[1].split('/');
|
||||||
const enabledLangTags = env.translation
|
const enabledLangTags = [];
|
||||||
.enabledLanguages()
|
for (let i = 0; i < translation['languages'].length; i++) {
|
||||||
.map(lang => lang.tag);
|
enabledLangTags.push(translation['languages'][i].tag);
|
||||||
|
}
|
||||||
for (let i = 0; i < parts.length; i++) {
|
for (let i = 0; i < parts.length; i++) {
|
||||||
if (enabledLangTags.indexOf(parts[i]) !== -1) {
|
if (enabledLangTags.indexOf(parts[i]) !== -1) {
|
||||||
language = parts[i];
|
language = parts[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let englishFile = CWD + '/pages/' + file;
|
let englishFile = CWD + '/pages/' + file;
|
||||||
if (language && language !== 'en') {
|
if (language !== 'en') {
|
||||||
englishFile = englishFile.replace('/' + language + '/', '/en/');
|
englishFile = englishFile.replace('/' + language + '/', '/en/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue