Skip to content

Commit 6c7991c

Browse files
bestanderfacebook-github-bot-4
authored andcommitted
Added ability to switch version in documentation website
Reviewed By: svcscm Differential Revision: D2932534 fb-gh-sync-id: e67f028c914b64424458dad8fe52e588f6d0cd1c shipit-source-id: e67f028c914b64424458dad8fe52e588f6d0cd1c
1 parent e93afad commit 6c7991c

File tree

5 files changed

+96
-12
lines changed

5 files changed

+96
-12
lines changed

website/core/Site.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var Metadata = require('Metadata');
1616
var Site = React.createClass({
1717
render: function() {
1818
const path = Metadata.config.RN_DEPLOYMENT_PATH;
19+
const version = Metadata.config.RN_VERSION;
1920
var basePath = '/react-native/' + (path ? path + '/' : '');
2021
var title = this.props.title ? this.props.title + ' – ' : '';
2122
var currentYear = (new Date()).getFullYear();
@@ -52,6 +53,9 @@ var Site = React.createClass({
5253
<img src="img/header_logo.png" />
5354
React Native
5455
</a>
56+
<a className="nav-version" href="/react-native/versions.html">
57+
{version}
58+
</a>
5559
<HeaderLinks section={this.props.section} />
5660
</div>
5761
</div>

website/package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
{
22
"scripts": {
3-
"start": "node server/server.js",
3+
"start": "RN_VERSION=next node server/server.js",
44
"gh-pages": "node publish-gh-pages.js"
55
},
66
"dependencies": {
77
"bluebird": "^2.9.21",
88
"connect": "2.8.3",
9-
"esprima-fb": "latest",
10-
"fs.extra": "latest",
11-
"glob": "latest",
12-
"jstransform": "latest",
13-
"mkdirp": "latest",
9+
"esprima-fb": "15001.1001.0-dev-harmony-fb",
10+
"fs.extra": "1.3.2",
11+
"glob": "6.0.4",
12+
"jstransform": "11.0.3",
13+
"mkdirp": "^0.5.1",
1414
"optimist": "0.6.0",
1515
"react": "~0.13.0",
1616
"react-docgen": "^2.0.1",
1717
"react-page-middleware": "git://github.com/facebook/react-page-middleware.git",
18-
"request": "latest",
18+
"request": "^2.69.0",
19+
"semver-compare": "^1.0.0",
1920
"shelljs": "^0.6.0"
2021
}
2122
}

website/publish-gh-pages.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
*/
99
'use strict';
1010

11-
const CIRCLE_BRANCH = process.env.CIRCLE_BRANCH || '';
11+
var semverCmp = require('semver-compare');
12+
require(`shelljs/global`);
13+
14+
const CIRCLE_BRANCH = process.env.CIRCLE_BRANCH;
1215
const CIRCLE_PROJECT_USERNAME = process.env.CIRCLE_PROJECT_USERNAME;
13-
const CIRCLE_PROJECT_REPONAME = process.env.CIRCLE_PROJECT_REPONAME;
1416
const CI_PULL_REQUESTS = process.env.CI_PULL_REQUESTS;
1517
const CI_PULL_REQUEST = process.env.CI_PULL_REQUEST;
1618
const GIT_USER = process.env.GIT_USER;
1719
const remoteBranch = `https://${GIT_USER}@github.com/facebook/react-native.git`;
18-
require(`shelljs/global`);
1920

2021
if (!which(`git`)) {
2122
echo(`Sorry, this script requires git`);
@@ -55,25 +56,37 @@ if (!CI_PULL_REQUEST && CIRCLE_PROJECT_USERNAME === `facebook`) {
5556
echo(`Error: Git checkout gh-pages failed`);
5657
exit(1);
5758
}
59+
cd(`releases`);
60+
var releasesFolders = ls(`-d`, `*`)
61+
cd(`..`);
62+
var versions = releasesFolders.filter(name => name !== `next`);
63+
if (versions.indexOf(version) === -1) {
64+
versions.push(version);
65+
}
66+
versions.sort(semverCmp).reverse();
67+
5868
// generate to releases/XX when branch name indicates that it is some sort of release
5969
if (!!version) {
6070
echo(`------------ DEPLOYING /releases/${version}`);
6171
rm(`-rf`, `releases/${version}`);
6272
mkdir(`-p`, `releases/${version}`);
6373
cd(`../..`);
64-
if (exec(`RN_DEPLOYMENT_PATH=releases/${version} node server/generate.js`).code !== 0) {
74+
if (exec(`RN_DEPLOYMENT_PATH=releases/${version} RN_VERSION=${version} \
75+
RN_AVAILABLE_DOCS_VERSIONS=${versions.join(',')} node server/generate.js`).code !== 0) {
6576
echo(`Error: Generating HTML failed`);
6677
exit(1);
6778
}
6879
cd(`build/react-native-gh-pages`);
6980
exec(`cp -R ../react-native/* releases/${version}`);
81+
// versions.html is located in root of website and updated with every release
82+
exec(`cp ../react-native/versions.html .`);
7083
}
7184
if (currentCommit === latestTagCommit) {
7285
echo(`------------ DEPLOYING latest`);
7386
// leave only releases folder
7487
rm(`-rf`, ls(`*`).filter(name => name !== 'releases'));
7588
cd(`../..`);
76-
if (exec(`node server/generate.js`).code !== 0) {
89+
if (exec(`RN_VERSION=${version} RN_AVAILABLE_DOCS_VERSIONS=${versions} node server/generate.js`).code !== 0) {
7790
echo(`Error: Generating HTML failed`);
7891
exit(1);
7992
}

website/src/react-native/css/react-native.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,14 @@ h1:hover .hash-link, h2:hover .hash-link, h3:hover .hash-link, h4:hover .hash-li
312312
display: inline;
313313
}
314314

315+
.nav-main a.nav-version {
316+
font-size: 16px;
317+
font-weight: 800;
318+
color: #05A5D1;
319+
margin-left: 5px;
320+
text-decoration: underline;
321+
}
322+
315323
.hero {
316324
background: #05A5D1;
317325
padding: 50px 0;
@@ -478,6 +486,15 @@ h1:hover .hash-link, h2:hover .hash-link, h3:hover .hash-link, h4:hover .hash-li
478486
box-shadow: 5px 5px 5px #888888;
479487
}
480488

489+
.versions ul {
490+
list-style: none;
491+
}
492+
493+
.versions li {
494+
font-size: 16px;
495+
padding-top: 10px;
496+
}
497+
481498
#examples h3, .home-presentation h3 {
482499
color: #2d2d2d;
483500
font-size: 24px;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
var React = require('React');
11+
var Site = require('Site');
12+
var Metadata = require('Metadata');
13+
14+
var versions = React.createClass({
15+
render: function() {
16+
17+
var availableDocs = (Metadata.config.RN_AVAILABLE_DOCS_VERSIONS || '').split(',');
18+
var versions = [
19+
{
20+
title: 'next',
21+
path: '/react-native/releases/next',
22+
},
23+
{
24+
title: 'stable',
25+
path: '/react-native',
26+
},
27+
].concat(availableDocs.map((version) => {
28+
return {
29+
title: version,
30+
path: '/react-native/releases/' + version
31+
}
32+
}));
33+
var versionsLi = versions.map((version) =>
34+
<li><a href={version.path}>{version.title}</a></li>
35+
);
36+
return (
37+
<Site section="versions" title="Documentation archive">
38+
<section className="content wrap versions documentationContent">
39+
<h1>Documentation archive</h1>
40+
<ul>
41+
{versionsLi}
42+
</ul>
43+
</section>
44+
</Site>
45+
);
46+
}
47+
});
48+
49+
module.exports = versions;

0 commit comments

Comments
 (0)