summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-09-21 19:17:32 +0200
committerSamy Pesse <samypesse@gmail.com>2016-09-21 19:17:32 +0200
commit2257e42299f28f2a276bf2febd7f5d00e3931c08 (patch)
treeac97009c68611deccd2d7851ab1b52efb5967b20
parent0e0c1a473b610b0b2d96f2549b6666e3d8158e64 (diff)
downloadgitbook-2257e42299f28f2a276bf2febd7f5d00e3931c08.zip
gitbook-2257e42299f28f2a276bf2febd7f5d00e3931c08.tar.gz
gitbook-2257e42299f28f2a276bf2febd7f5d00e3931c08.tar.bz2
Add js scripts to html
-rw-r--r--packages/gitbook-core/src/components/InjectedComponent.js12
-rw-r--r--packages/gitbook-core/src/components/UnsafeComponent.js7
-rw-r--r--packages/gitbook-core/src/index.js4
-rw-r--r--packages/gitbook-core/src/renderComponent.js25
-rw-r--r--packages/gitbook-plugin-theme-default/src/index.js6
-rw-r--r--packages/gitbook/src/browser/render.js41
-rw-r--r--packages/gitbook/src/output/website/onPage.js13
7 files changed, 47 insertions, 61 deletions
diff --git a/packages/gitbook-core/src/components/InjectedComponent.js b/packages/gitbook-core/src/components/InjectedComponent.js
index f8b1ab8..a4f81fe 100644
--- a/packages/gitbook-core/src/components/InjectedComponent.js
+++ b/packages/gitbook-core/src/components/InjectedComponent.js
@@ -29,17 +29,18 @@ const { findMatchingComponents } = require('../actions/components');
const Injection = React.createClass({
propTypes: {
component: React.PropTypes.func,
- props: React.PropTypes.object
+ props: React.PropTypes.object,
+ children: React.PropTypes.node
},
render() {
const Comp = this.props.component;
- const { props } = this.props;
+ const { props, children } = this.props;
if (Comp.sandbox === false) {
- return <Comp {...props} />;
+ return <Comp {...props}>{children}</Comp>;
} else {
- return <UnsafeComponent Component={Comp} props={props} />;
+ return <UnsafeComponent Component={Comp} props={props}>{children}</UnsafeComponent>;
}
}
});
@@ -82,7 +83,6 @@ const InjectedComponent = React.createClass({
render() {
const { components, props, children } = this.props;
- const base = children ? React.Children.only(children) : undefined;
return components.reduce((inner, Comp) => {
return (
@@ -90,7 +90,7 @@ const InjectedComponent = React.createClass({
{inner}
</Injection>
);
- }, base);
+ }, children);
}
});
diff --git a/packages/gitbook-core/src/components/UnsafeComponent.js b/packages/gitbook-core/src/components/UnsafeComponent.js
index 81ec239..3534f45 100644
--- a/packages/gitbook-core/src/components/UnsafeComponent.js
+++ b/packages/gitbook-core/src/components/UnsafeComponent.js
@@ -22,7 +22,8 @@ const isServerSide = typeof window === 'undefined';
const UnsafeComponent = React.createClass({
propTypes: {
Component: React.PropTypes.func.isRequired,
- props: React.PropTypes.object
+ props: React.PropTypes.object,
+ children: React.PropTypes.node
},
contextTypes: {
store: React.PropTypes.object
@@ -41,12 +42,12 @@ const UnsafeComponent = React.createClass({
},
getInjected() {
- const { Component, props } = this.props;
+ const { Component, props, children } = this.props;
const { store } = this.context;
return (
<ReactRedux.Provider store={store}>
- <Component {...props}/>
+ <Component {...props}>{children}</Component>
</ReactRedux.Provider>
);
},
diff --git a/packages/gitbook-core/src/index.js b/packages/gitbook-core/src/index.js
index 9b29c91..b4b2abd 100644
--- a/packages/gitbook-core/src/index.js
+++ b/packages/gitbook-core/src/index.js
@@ -1,4 +1,5 @@
const Head = require('react-helmet');
+const { Provider } = require('react-redux');
const { InjectedComponent, InjectedComponentSet } = require('./components/InjectedComponent');
const HTMLContent = require('./components/HTMLContent');
@@ -11,7 +12,6 @@ const connect = require('./connect');
const createPlugin = require('./createPlugin');
const createReducer = require('./createReducer');
const createStore = require('./createStore');
-const renderComponent = require('./renderComponent');
module.exports = {
ACTIONS,
@@ -19,13 +19,13 @@ module.exports = {
createPlugin,
createReducer,
createStore,
- renderComponent,
registerComponent,
// React Components
InjectedComponent,
InjectedComponentSet,
HTMLContent,
Head,
+ Provider,
// Utilities
Shapes
};
diff --git a/packages/gitbook-core/src/renderComponent.js b/packages/gitbook-core/src/renderComponent.js
deleted file mode 100644
index 14e7bf8..0000000
--- a/packages/gitbook-core/src/renderComponent.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const React = require('react');
-const Helmet = require('react-helmet');
-const ReactRedux = require('react-redux');
-const { InjectedComponent } = require('./components/InjectedComponent');
-
-/**
- * Render a registered component from a store.
- * This method is intended for server-side use in "gitbook".
- *
- * @param {ReduxStore} store
- * @param {Descriptor} matching
- * @return {Object} { el, meta }
- */
-function renderComponent(store, matching) {
- const el = (
- <ReactRedux.Provider store={store}>
- <InjectedComponent matching={matching} />
- </ReactRedux.Provider>
- );
- const getHead = Helmet.rewind;
-
- return { el, getHead };
-}
-
-module.exports = renderComponent;
diff --git a/packages/gitbook-plugin-theme-default/src/index.js b/packages/gitbook-plugin-theme-default/src/index.js
index 86b2135..6499d5a 100644
--- a/packages/gitbook-plugin-theme-default/src/index.js
+++ b/packages/gitbook-plugin-theme-default/src/index.js
@@ -6,11 +6,12 @@ const Page = require('./Page');
let ThemeBody = React.createClass({
propTypes: {
- page: GitBook.Shapes.Page
+ page: GitBook.Shapes.Page,
+ children: React.PropTypes.node
},
render() {
- const { page } = this.props;
+ const { page, children } = this.props;
return (
<div className="GitBook book">
@@ -21,6 +22,7 @@ let ThemeBody = React.createClass({
<Sidebar />
<Page page={page} />
+ {children}
</div>
);
}
diff --git a/packages/gitbook/src/browser/render.js b/packages/gitbook/src/browser/render.js
index e397279..ee4600a 100644
--- a/packages/gitbook/src/browser/render.js
+++ b/packages/gitbook/src/browser/render.js
@@ -2,9 +2,10 @@ const React = require('react');
const ReactDOMServer = require('react-dom/server');
const GitBook = require('gitbook-core');
-function HTML({head, innerHTML, props}) {
+const loadPlugins = require('./loadPlugins');
+
+function HTML({head, innerHTML}) {
const attrs = head.htmlAttributes.toComponent();
- const propsJSON = JSON.stringify(props);
return (
<html {...attrs}>
@@ -17,40 +18,58 @@ function HTML({head, innerHTML, props}) {
<body>
<div id="content" dangerouslySetInnerHTML={{__html: innerHTML}} />
{head.script.toComponent()}
- <script
- type="application/payload+json"
- dangerouslySetInnerHTML={{__html: propsJSON}} />
</body>
</html>
);
}
HTML.propTypes = {
head: React.PropTypes.object,
- props: React.PropTypes.object,
innerHTML: React.PropTypes.string
};
/**
* Render a page
- * @param {List<Plugin>} plugin
+ * @param {OrderedMap<String:Plugin>} plugin
* @param {Object} initialState
* @return {String} html
*/
function render(plugins, initialState) {
- const store = GitBook.createStore(plugins, initialState);
- const { el, getHead } = GitBook.renderComponent(store, { role: 'Body' });
+ // Load the plugins
+ const browserPlugins = loadPlugins(plugins);
+ const store = GitBook.createStore(browserPlugins, initialState);
+
+ const scripts = plugins.toList()
+ .filter(plugin => plugin.getPackage().has('browser'))
+ .map(plugin => {
+ return { src: '/gitbook/plugins/' + plugin.getName() + '.js' };
+ })
+ .toArray();
+
+ scripts.push({
+ type: 'application/payload+json',
+ innerHTML: JSON.stringify(initialState)
+ });
+
+ const el = (
+ <GitBook.Provider store={store}>
+ <GitBook.InjectedComponent matching={{ role: 'Body' }}>
+ <GitBook.Head
+ script={scripts}
+ />
+ </GitBook.InjectedComponent>
+ </GitBook.Provider>
+ );
// Render inner body
const innerHTML = ReactDOMServer.renderToString(el);
// Get headers
- const head = getHead();
+ const head = GitBook.Head.rewind();
// Render whole HTML page
const htmlEl = <HTML
head={head}
innerHTML={innerHTML}
- props={initialState}
/>;
const html = ReactDOMServer.renderToStaticMarkup(htmlEl);
diff --git a/packages/gitbook/src/output/website/onPage.js b/packages/gitbook/src/output/website/onPage.js
index 7e93080..cd97723 100644
--- a/packages/gitbook/src/output/website/onPage.js
+++ b/packages/gitbook/src/output/website/onPage.js
@@ -1,15 +1,10 @@
-const path = require('path');
-
const Plugins = require('../../plugins');
const JSONUtils = require('../../json');
-const LocationUtils = require('../../utils/location');
const Modifiers = require('../modifiers');
const writeFile = require('../helper/writeFile');
const fileToOutput = require('../helper/fileToOutput');
const getModifiers = require('../getModifiers');
-const createTemplateEngine = require('./createTemplateEngine');
const render = require('../../browser/render');
-const loadBrowserPlugins = require('../../browser/loadPlugins');
/**
* Write a page as a json file
@@ -34,14 +29,8 @@ function onPage(output, page) {
resources: Plugins.listResources(plugins, resources).toJS()
};
- // We should probabbly move it to "template" or a "site" namespace
- // context.basePath = basePath;
-
- // Load the plugins
- const browserPlugins = loadBrowserPlugins(plugins);
-
// Render the theme
- const html = render(browserPlugins, initialState);
+ const html = render(plugins, initialState);
// Write it to the disk
return writeFile(output, filePath, html);