mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-29 18:27:56 +02:00
115 lines
3.8 KiB
JavaScript
115 lines
3.8 KiB
JavaScript
/**
|
|
* 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 Container = require('./Container.js');
|
|
const Doc = require('./Doc.js');
|
|
const DocsSidebar = require('./DocsSidebar.js');
|
|
const OnPageNav = require('./nav/OnPageNav.js');
|
|
const Site = require('./Site.js');
|
|
const translation = require('../server/translation.js');
|
|
const path = require('path');
|
|
|
|
// component used to generate whole webpage for docs, including sidebar/header/footer
|
|
class DocsLayout extends React.Component {
|
|
getRelativeURL = (from, to) => {
|
|
const extension = this.props.config.cleanUrl ? '' : '.html';
|
|
return (
|
|
path
|
|
.relative(from, to)
|
|
.replace('\\', '/')
|
|
.replace(/^\.\.\//, '') + extension
|
|
);
|
|
};
|
|
|
|
render() {
|
|
const metadata = this.props.metadata;
|
|
const content = this.props.children;
|
|
const i18n = translation[this.props.metadata.language];
|
|
let DocComponent = Doc;
|
|
if (this.props.Doc) {
|
|
DocComponent = this.props.Doc;
|
|
}
|
|
const title = i18n
|
|
? translation[this.props.metadata.language]['localized-strings'][
|
|
this.props.metadata.localized_id
|
|
] || this.props.metadata.title
|
|
: this.props.metadata.title;
|
|
return (
|
|
<Site
|
|
config={this.props.config}
|
|
className="sideNavVisible doc"
|
|
title={title}
|
|
description={content.trim().split('\n')[0]}
|
|
language={metadata.language}
|
|
version={metadata.version}
|
|
metadata={metadata}>
|
|
<div className="docMainWrapper wrapper">
|
|
<DocsSidebar metadata={metadata} />
|
|
<Container className="mainContainer">
|
|
<DocComponent
|
|
metadata={metadata}
|
|
content={content}
|
|
config={this.props.config}
|
|
source={metadata.source}
|
|
hideTitle={this.props.metadata.hide_title}
|
|
title={title}
|
|
version={metadata.version}
|
|
language={metadata.language}
|
|
/>
|
|
<div className="docs-prevnext">
|
|
{metadata.previous_id && (
|
|
<a
|
|
className="docs-prev button"
|
|
href={this.getRelativeURL(
|
|
metadata.localized_id,
|
|
metadata.previous_id
|
|
)}>
|
|
←{' '}
|
|
{i18n
|
|
? translation[this.props.metadata.language][
|
|
'localized-strings'
|
|
][metadata.previous_id] ||
|
|
translation[this.props.metadata.language][
|
|
'localized-strings'
|
|
]['previous'] ||
|
|
'Previous'
|
|
: metadata.previous_title || 'Previous'}
|
|
</a>
|
|
)}
|
|
{metadata.next_id && (
|
|
<a
|
|
className="docs-next button"
|
|
href={this.getRelativeURL(
|
|
metadata.localized_id,
|
|
metadata.next_id
|
|
)}>
|
|
{i18n
|
|
? translation[this.props.metadata.language][
|
|
'localized-strings'
|
|
][metadata.next_id] ||
|
|
translation[this.props.metadata.language][
|
|
'localized-strings'
|
|
]['next'] ||
|
|
'Next'
|
|
: metadata.next_title || 'Next'}{' '}
|
|
→
|
|
</a>
|
|
)}
|
|
</div>
|
|
</Container>
|
|
{this.props.config.onPageNav == 'separate' && (
|
|
<nav className="onPageNav">
|
|
<OnPageNav rawContent={this.props.children} />
|
|
</nav>
|
|
)}
|
|
</div>
|
|
</Site>
|
|
);
|
|
}
|
|
}
|
|
module.exports = DocsLayout;
|