mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-02 03:37:48 +02:00
If the site is versioned, and the latest version is displayed, the URL will not change. We need to let Algolia know this is the case.
152 lines
5.7 KiB
JavaScript
152 lines
5.7 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 fs = require('fs');
|
|
const HeaderNav = require('./nav/HeaderNav.js');
|
|
const Head = require('./Head.js');
|
|
const Footer = require(process.cwd() + '/core/Footer.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 Site 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 docsVersion = this.props.version || 'current';
|
|
|
|
const highlightDefaultVersion = '9.12.0';
|
|
const highlightConfig = this.props.config.highlight || {
|
|
version: highlightDefaultVersion,
|
|
theme: 'default',
|
|
};
|
|
const highlightVersion = highlightConfig.version || highlightDefaultVersion;
|
|
if (fs.existsSync(CWD + '/versions.json')) {
|
|
const latestVersion = require(CWD + '/versions.json')[0];
|
|
if (docsVersion === latestVersion) {
|
|
docsVersion = 'current';
|
|
}
|
|
}
|
|
|
|
// We do not want a lang attribute for the html tag if we don't have a language set
|
|
let htmlElementProps;
|
|
if (this.props.language) {
|
|
htmlElementProps = {
|
|
lang: this.props.language,
|
|
};
|
|
} else {
|
|
htmlElementProps = {};
|
|
}
|
|
|
|
return (
|
|
<html {...htmlElementProps}>
|
|
<Head
|
|
config={this.props.config}
|
|
description={description}
|
|
title={title}
|
|
url={url}
|
|
/>
|
|
<body className={this.props.className}>
|
|
<HeaderNav
|
|
config={this.props.config}
|
|
baseUrl={this.props.config.baseUrl}
|
|
title={this.props.config.title}
|
|
language={this.props.language}
|
|
version={this.props.version}
|
|
/>
|
|
<div className="navPusher">
|
|
{this.props.children}
|
|
<Footer config={this.props.config} language={this.props.language} />
|
|
</div>
|
|
{this.props.config.algolia && (
|
|
<script
|
|
type="text/javascript"
|
|
src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"
|
|
/>
|
|
)}
|
|
{this.props.config.gaTrackingId && (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
|
|
ga('create', '${this.props.config.gaTrackingId}', 'auto');
|
|
ga('send', 'pageview');
|
|
`,
|
|
}}
|
|
/>
|
|
)}
|
|
{this.props.config.facebookAppId && (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `window.fbAsyncInit = function() {FB.init({appId:'${
|
|
this.props.config.facebookAppId
|
|
}',xfbml:true,version:'v2.7'});};(function(d, s, id){var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = '//connect.facebook.net/en_US/sdk.js';fjs.parentNode.insertBefore(js, fjs);}(document, 'script','facebook-jssdk'));
|
|
`,
|
|
}}
|
|
/>
|
|
)}
|
|
{this.props.config.twitter && (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));`,
|
|
}}
|
|
/>
|
|
)}
|
|
{this.props.config.algolia &&
|
|
(this.props.config.algolia.algoliaOptions ? (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `
|
|
var search = docsearch({
|
|
apiKey: '${this.props.config.algolia.apiKey}',
|
|
indexName: '${this.props.config.algolia.indexName}',
|
|
inputSelector: '#search_input_react',
|
|
algoliaOptions: ${JSON.stringify(
|
|
this.props.config.algolia.algoliaOptions
|
|
)
|
|
.replace('VERSION', docsVersion)
|
|
.replace('LANGUAGE', this.props.language)}
|
|
});
|
|
`,
|
|
}}
|
|
/>
|
|
) : (
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `
|
|
var search = docsearch({
|
|
apiKey: '${this.props.config.algolia.apiKey}',
|
|
indexName: '${this.props.config.algolia.indexName}',
|
|
inputSelector: '#search_input_react'
|
|
});
|
|
`,
|
|
}}
|
|
/>
|
|
))}
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|
|
}
|
|
module.exports = Site;
|