mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-10 15:47:23 +02:00
Generates a file that redirects from /docs/file.html to /docs/en/folder.html when languages are enabled (languages.js is present) (#137)
This commit is contained in:
parent
bcba05ae03
commit
967970eaa5
3 changed files with 104 additions and 5 deletions
|
@ -18,7 +18,7 @@ class Head extends React.Component {
|
||||||
let sourceCodeButton = this.props.config.sourceCodeButton;
|
let sourceCodeButton = this.props.config.sourceCodeButton;
|
||||||
// defaults to github, but other values may be allowed in the future
|
// defaults to github, but other values may be allowed in the future
|
||||||
let includeGithubButton =
|
let includeGithubButton =
|
||||||
sourceCodeButton === 'github' || sourceCodeButton == null;
|
sourceCodeButton === "github" || sourceCodeButton == null;
|
||||||
return (
|
return (
|
||||||
<head>
|
<head>
|
||||||
<meta charSet="utf-8" />
|
<meta charSet="utf-8" />
|
||||||
|
@ -36,6 +36,12 @@ class Head extends React.Component {
|
||||||
content={this.props.config.baseUrl + this.props.config.ogImage}
|
content={this.props.config.baseUrl + this.props.config.ogImage}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{this.props.redirect && (
|
||||||
|
<meta
|
||||||
|
http-equiv="refresh"
|
||||||
|
content={"2; URL=" + this.props.redirect}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<link
|
<link
|
||||||
rel="shortcut icon"
|
rel="shortcut icon"
|
||||||
href={this.props.config.baseUrl + this.props.config.favicon}
|
href={this.props.config.baseUrl + this.props.config.favicon}
|
||||||
|
@ -66,10 +72,13 @@ class Head extends React.Component {
|
||||||
title={this.props.config.title + " Blog RSS Feed"}
|
title={this.props.config.title + " Blog RSS Feed"}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{includeGithubButton &&
|
{includeGithubButton && (
|
||||||
<script async defer src="https://buttons.github.io/buttons.js" />
|
<script async defer src="https://buttons.github.io/buttons.js" />
|
||||||
}
|
)}
|
||||||
<script type="text/javascript" src={this.props.config.baseUrl + "js/webplayer.js"} />
|
<script
|
||||||
|
type="text/javascript"
|
||||||
|
src={this.props.config.baseUrl + "js/webplayer.js"}
|
||||||
|
/>
|
||||||
<script type="text/javascript" src="https://snack.expo.io/embed.js" />
|
<script type="text/javascript" src="https://snack.expo.io/embed.js" />
|
||||||
</head>
|
</head>
|
||||||
);
|
);
|
||||||
|
|
68
lib/core/Redirect.js
Normal file
68
lib/core/Redirect.js
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/**
|
||||||
|
* 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 React = require("react");
|
||||||
|
const fs = require("fs");
|
||||||
|
const Head = require("./Head.js");
|
||||||
|
const translation = require("../server/translation.js");
|
||||||
|
|
||||||
|
const CWD = process.cwd();
|
||||||
|
|
||||||
|
// Component used to provide same head, header, footer, other scripts to all pages
|
||||||
|
class Redirect extends React.Component {
|
||||||
|
render() {
|
||||||
|
const tagline = translation[this.props.language]
|
||||||
|
? translation[this.props.language]["localized-strings"].tagline
|
||||||
|
: this.props.config.tagline;
|
||||||
|
const title = this.props.title
|
||||||
|
? this.props.title + " · " + this.props.config.title
|
||||||
|
: (!this.props.config.disableTitleTagline &&
|
||||||
|
this.props.config.title + " · " + tagline) ||
|
||||||
|
this.props.config.title;
|
||||||
|
const description = this.props.description || tagline;
|
||||||
|
const url =
|
||||||
|
this.props.config.url +
|
||||||
|
this.props.config.baseUrl +
|
||||||
|
(this.props.url || "index.html");
|
||||||
|
let latestVersion;
|
||||||
|
|
||||||
|
const redirect = this.props.redirect || false;
|
||||||
|
|
||||||
|
if (fs.existsSync(CWD + "/versions.json")) {
|
||||||
|
latestVersion = require(CWD + "/versions.json")[0];
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<html>
|
||||||
|
<Head
|
||||||
|
config={this.props.config}
|
||||||
|
description={description}
|
||||||
|
title={title}
|
||||||
|
url={url}
|
||||||
|
redirect={redirect}
|
||||||
|
/>
|
||||||
|
<body className={this.props.className}>
|
||||||
|
The page you are looking for has moved. If you are not redirected to
|
||||||
|
the new page in three seconds, then you can navigate to the new page
|
||||||
|
by using <a href={this.props.redirect}>this link</a>.
|
||||||
|
<script
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `
|
||||||
|
<!--
|
||||||
|
window.setTimeout(
|
||||||
|
function(){window.location.href = "${this.props
|
||||||
|
.redirect}"},3000
|
||||||
|
);
|
||||||
|
// -->
|
||||||
|
`
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</body>{" "}
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports = Redirect;
|
|
@ -111,6 +111,7 @@ function execute() {
|
||||||
});
|
});
|
||||||
|
|
||||||
const DocsLayout = require("../core/DocsLayout.js");
|
const DocsLayout = require("../core/DocsLayout.js");
|
||||||
|
const Redirect = require("../core/Redirect.js");
|
||||||
|
|
||||||
fs.removeSync(CWD + "/build");
|
fs.removeSync(CWD + "/build");
|
||||||
|
|
||||||
|
@ -192,8 +193,29 @@ function execute() {
|
||||||
const str = renderToStaticMarkup(docComp);
|
const str = renderToStaticMarkup(docComp);
|
||||||
const targetFile =
|
const targetFile =
|
||||||
CWD + "/build/" + siteConfig.projectName + "/" + metadata.permalink;
|
CWD + "/build/" + siteConfig.projectName + "/" + metadata.permalink;
|
||||||
|
|
||||||
writeFileAndCreateFolder(targetFile, str);
|
writeFileAndCreateFolder(targetFile, str);
|
||||||
|
|
||||||
|
// generate english page redirects when languages are enabled
|
||||||
|
if (ENABLE_TRANSLATION) {
|
||||||
|
const redirectComp = (
|
||||||
|
<Redirect
|
||||||
|
metadata={metadata}
|
||||||
|
language={language}
|
||||||
|
config={siteConfig}
|
||||||
|
redirect={"/" + metadata.permalink}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
const redirectStr = renderToStaticMarkup(redirectComp);
|
||||||
|
|
||||||
|
// create a redirects page for doc files
|
||||||
|
const redirectFile =
|
||||||
|
CWD +
|
||||||
|
"/build/" +
|
||||||
|
siteConfig.projectName +
|
||||||
|
"/" +
|
||||||
|
metadata.permalink.replace("docs/en", "docs");
|
||||||
|
writeFileAndCreateFolder(redirectFile, redirectStr);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// copy docs assets if they exist
|
// copy docs assets if they exist
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue