diff --git a/.gitignore b/.gitignore
index 8a860f1ed8e..c00f32d5fae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,3 +57,6 @@ node_modules
/coverage
/third-party
+
+/website/src
+/website/build
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000000..5192e3666a9
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,14 @@
+{
+ // Use IntelliSense to learn about possible Node.js debug attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Launch Program",
+ "program": "${workspaceRoot}/Libraries/react-native/react-native-implementation.js"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docgen/.gitignore b/docgen/.gitignore
new file mode 100644
index 00000000000..84c048a73cc
--- /dev/null
+++ b/docgen/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/docgen/README.md b/docgen/README.md
new file mode 100644
index 00000000000..990fd2e3b47
--- /dev/null
+++ b/docgen/README.md
@@ -0,0 +1,30 @@
+# React Native Docs Generator
+
+The React Native website is generated from a collection of markdown documents. This directory holds a collection of scripts necessary to generate these markdown docs prior to the site being built.
+
+## import-existing-docs.js
+
+For development use only. This script will pull down the current docs from master, and apply any transformations necessary to host the docs under the new website build script.
+
+### Usage
+
+Run the following command locally:
+
+```
+GIT_USER=your_git_user GITHUB_USERNAME=facebook GITHUB_REPONAME=react-native node server/import-existing-docs.js
+```
+
+This will perform a sparse checkout of the `docs/` folder from `master`, generating a clean set of markdown docs in the local `docs/` folder. It will also write to disk an updated `sidebars.json` file based on these docs.
+
+## build.js
+
+Runs the usual autodocs generation scripts used by the `react-page-middleware` variant of the React Native website, but provides markdown instead of HTML. Run this script prior to building the website.
+
+### Usage
+
+Run the following commands locally (the generate script needs to run first):
+
+```
+node server/generate.js
+node server/build.js
+```
\ No newline at end of file
diff --git a/website/core/AlgoliaDocSearch.js b/docgen/core/AlgoliaDocSearch.js
similarity index 89%
rename from website/core/AlgoliaDocSearch.js
rename to docgen/core/AlgoliaDocSearch.js
index 49cf9002584..1a0e544d073 100644
--- a/website/core/AlgoliaDocSearch.js
+++ b/docgen/core/AlgoliaDocSearch.js
@@ -12,14 +12,14 @@
var React = require('React');
-var AlgoliaDocSearch = React.createClass({
- render: function() {
+class AlgoliaDocSearch extends React.Component {
+ render() {
return (
);
}
-});
+}
module.exports = AlgoliaDocSearch;
diff --git a/website/core/BlogPost.js b/docgen/core/BlogPost.js
similarity index 93%
rename from website/core/BlogPost.js
rename to docgen/core/BlogPost.js
index 432fc961721..50ba3d561fe 100644
--- a/website/core/BlogPost.js
+++ b/docgen/core/BlogPost.js
@@ -17,8 +17,8 @@ var BlogPostHeader = require('BlogPostHeader');
var BlogPostFooter = require('BlogPostFooter');
var ExcerptLink = require('ExcerptLink');
-var BlogPost = React.createClass({
- render: function() {
+class BlogPost extends React.Component {
+ render() {
var post = this.props.post;
return (
@@ -31,6 +31,6 @@ var BlogPost = React.createClass({
);
}
-});
+}
module.exports = BlogPost;
diff --git a/website/core/BlogPostDate.js b/docgen/core/BlogPostDate.js
similarity index 93%
rename from website/core/BlogPostDate.js
rename to docgen/core/BlogPostDate.js
index 7dd4d9d85af..f2a6b2c9e5f 100644
--- a/website/core/BlogPostDate.js
+++ b/docgen/core/BlogPostDate.js
@@ -13,8 +13,8 @@
var React = require('React');
-var BlogPostDate = React.createClass({
- render: function() {
+class BlogPostDate extends React.Component {
+ render() {
var post = this.props.post;
var match = post.publishedAt.match(/([0-9]+)-([0-9]+)-([0-9]+)/);
@@ -32,6 +32,6 @@ var BlogPostDate = React.createClass({
);
}
-});
+}
module.exports = BlogPostDate;
diff --git a/website/core/BlogPostExcerpt.js b/docgen/core/BlogPostExcerpt.js
similarity index 93%
rename from website/core/BlogPostExcerpt.js
rename to docgen/core/BlogPostExcerpt.js
index 3f5c5b2d653..644a7343579 100644
--- a/website/core/BlogPostExcerpt.js
+++ b/docgen/core/BlogPostExcerpt.js
@@ -16,8 +16,8 @@ var BlogPostHeader = require('BlogPostHeader');
var Marked = require('Marked');
var ExcerptLink = require('ExcerptLink');
-var BlogPostExcerpt = React.createClass({
- render: function() {
+class BlogPostExcerpt extends React.Component {
+ render() {
var post = this.props.post;
return (
@@ -33,6 +33,6 @@ var BlogPostExcerpt = React.createClass({
);
}
-});
+}
module.exports = BlogPostExcerpt;
diff --git a/website/core/BlogPostFooter.js b/docgen/core/BlogPostFooter.js
similarity index 96%
rename from website/core/BlogPostFooter.js
rename to docgen/core/BlogPostFooter.js
index a0be8ecf46e..dbfdd421a55 100644
--- a/website/core/BlogPostFooter.js
+++ b/docgen/core/BlogPostFooter.js
@@ -14,8 +14,8 @@
var React = require('React');
var BlogPostDate = require('BlogPostDate');
-var BlogPostFooter = React.createClass({
- render: function() {
+class BlogPostFooter extends React.Component {
+ render() {
var post = this.props.post;
var authorImage = this.props.post.authorImage ? this.props.post.authorImage : '/react-native/img/author.png';
@@ -58,6 +58,6 @@ var BlogPostFooter = React.createClass({
);
}
-});
+}
module.exports = BlogPostFooter;
diff --git a/website/core/BlogPostHeader.js b/docgen/core/BlogPostHeader.js
similarity index 95%
rename from website/core/BlogPostHeader.js
rename to docgen/core/BlogPostHeader.js
index 53308c23754..a275d0de71c 100644
--- a/website/core/BlogPostHeader.js
+++ b/docgen/core/BlogPostHeader.js
@@ -14,8 +14,8 @@
var React = require('React');
var BlogPostDate = require('BlogPostDate');
-var BlogPostHeader = React.createClass({
- render: function() {
+class BlogPostHeader extends React.Component {
+ render() {
var post = this.props.post;
var hero;
@@ -54,6 +54,6 @@ var BlogPostHeader = React.createClass({
);
}
-});
+}
module.exports = BlogPostHeader;
diff --git a/website/core/DocsSidebar.js b/docgen/core/DocsSidebar.js
similarity index 91%
rename from website/core/DocsSidebar.js
rename to docgen/core/DocsSidebar.js
index dd0d5f878cd..dc196d2335c 100644
--- a/website/core/DocsSidebar.js
+++ b/docgen/core/DocsSidebar.js
@@ -13,8 +13,15 @@
var Metadata = require('Metadata');
var React = require('React');
-var DocsSidebar = React.createClass({
- getCategories: function() {
+class DocsSidebar extends React.Component {
+ constructor(props, context) {
+ super(props, context);
+
+ this.getCategories = this.getCategories.bind(this);
+ this.getLink = this.getLink.bind(this);
+ }
+
+ getCategories() {
var metadatas = Metadata.files.filter(function(metadata) {
return metadata.layout === 'docs' || metadata.layout === 'autodocs';
});
@@ -67,13 +74,13 @@ var DocsSidebar = React.createClass({
categories.push(currentCategory);
return categories;
- },
+ }
- getLink: function(metadata) {
+ getLink(metadata) {
return metadata.permalink;
- },
+ }
- render: function() {
+ render() {
return
{this.getCategories().map((category) =>
@@ -97,6 +104,6 @@ var DocsSidebar = React.createClass({