summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-core/src
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-09-22 10:37:06 +0200
committerSamy Pesse <samypesse@gmail.com>2016-09-22 10:37:06 +0200
commitf49089a7d3a6fd5523c71e06e5e0d132bb6ffd9a (patch)
tree4656866589cd5e46650b867cc2447619ea11bb3a /packages/gitbook-core/src
parent0b1888e184d3f995c3130daf794416ad0a4312bc (diff)
downloadgitbook-f49089a7d3a6fd5523c71e06e5e0d132bb6ffd9a.zip
gitbook-f49089a7d3a6fd5523c71e06e5e0d132bb6ffd9a.tar.gz
gitbook-f49089a7d3a6fd5523c71e06e5e0d132bb6ffd9a.tar.bz2
Add immutable state for readme/summary
Add shapes for these states
Diffstat (limited to 'packages/gitbook-core/src')
-rw-r--r--packages/gitbook-core/src/bootstrap.js2
-rw-r--r--packages/gitbook-core/src/reducers/file.js16
-rw-r--r--packages/gitbook-core/src/reducers/index.js9
-rw-r--r--packages/gitbook-core/src/reducers/page.js20
-rw-r--r--packages/gitbook-core/src/reducers/readme.js21
-rw-r--r--packages/gitbook-core/src/reducers/summary.js56
-rw-r--r--packages/gitbook-core/src/shapes/File.js13
-rw-r--r--packages/gitbook-core/src/shapes/Page.js7
-rw-r--r--packages/gitbook-core/src/shapes/Summary.js13
-rw-r--r--packages/gitbook-core/src/shapes/SummaryArticle.js20
-rw-r--r--packages/gitbook-core/src/shapes/SummaryPart.js13
-rw-r--r--packages/gitbook-core/src/shapes/index.js6
12 files changed, 188 insertions, 8 deletions
diff --git a/packages/gitbook-core/src/bootstrap.js b/packages/gitbook-core/src/bootstrap.js
index a5b457b..0a2e981 100644
--- a/packages/gitbook-core/src/bootstrap.js
+++ b/packages/gitbook-core/src/bootstrap.js
@@ -11,6 +11,8 @@ function bootstrap() {
const initialState = getPayload(window.document);
const plugins = window.gitbookPlugins;
+ console.log(initialState);
+
const mountNode = document.getElementById('content');
// Create the redux store
diff --git a/packages/gitbook-core/src/reducers/file.js b/packages/gitbook-core/src/reducers/file.js
new file mode 100644
index 0000000..028afc6
--- /dev/null
+++ b/packages/gitbook-core/src/reducers/file.js
@@ -0,0 +1,16 @@
+const { Record } = require('immutable');
+
+const DEFAULTS = {
+ type: '',
+ mtime: '',
+ path: ''
+};
+
+class FileState extends Record(DEFAULTS) {
+ static create(state) {
+ return state instanceof FileState ?
+ state : new FileState(state);
+ }
+}
+
+module.exports = FileState;
diff --git a/packages/gitbook-core/src/reducers/index.js b/packages/gitbook-core/src/reducers/index.js
index dae1f9c..18c9f1e 100644
--- a/packages/gitbook-core/src/reducers/index.js
+++ b/packages/gitbook-core/src/reducers/index.js
@@ -1,13 +1,10 @@
const Redux = require('redux');
-const identity = ((state, action) => state || {});
-
module.exports = Redux.combineReducers({
components: require('./components'),
navigation: require('./navigation'),
-
// GitBook JSON
- page: identity,
- summary: identity,
- readme: identity
+ page: require('./page'),
+ summary: require('./summary'),
+ readme: require('./readme')
});
diff --git a/packages/gitbook-core/src/reducers/page.js b/packages/gitbook-core/src/reducers/page.js
new file mode 100644
index 0000000..98764c0
--- /dev/null
+++ b/packages/gitbook-core/src/reducers/page.js
@@ -0,0 +1,20 @@
+const { Record } = require('immutable');
+
+const DEFAULTS = {
+ title: '',
+ content: '',
+ dir: 'ltr',
+ depth: 1,
+ level: ''
+};
+
+class PageState extends Record(DEFAULTS) {
+ static create(state) {
+ return state instanceof PageState ?
+ state : new PageState(state);
+ }
+}
+
+module.exports = (state, action) => {
+ return PageState.create(state);
+};
diff --git a/packages/gitbook-core/src/reducers/readme.js b/packages/gitbook-core/src/reducers/readme.js
new file mode 100644
index 0000000..8e99f3d
--- /dev/null
+++ b/packages/gitbook-core/src/reducers/readme.js
@@ -0,0 +1,21 @@
+const { Record } = require('immutable');
+const FileState = require('./file');
+
+class ReadmeState extends Record({
+ file: new FileState()
+}) {
+ constructor(state = {}) {
+ super({
+ file: new FileState(state.file)
+ });
+ }
+
+ static create(state) {
+ return state instanceof ReadmeState ?
+ state : new ReadmeState(state);
+ }
+}
+
+module.exports = (state, action) => {
+ return ReadmeState.create(state);
+};
diff --git a/packages/gitbook-core/src/reducers/summary.js b/packages/gitbook-core/src/reducers/summary.js
new file mode 100644
index 0000000..0179ecc
--- /dev/null
+++ b/packages/gitbook-core/src/reducers/summary.js
@@ -0,0 +1,56 @@
+const { Record, List } = require('immutable');
+const FileState = require('./file');
+
+class SummaryArticle extends Record({
+ title: '',
+ depth: 0,
+ path: '',
+ ref: '',
+ level: '',
+ articles: List()
+}) {
+ constructor(state) {
+ super({
+ ...state,
+ articles: (new List(state.articles))
+ .map(article => new SummaryArticle(article))
+ });
+ }
+}
+
+class SummaryPart extends Record({
+ title: '',
+ articles: List()
+}) {
+ constructor(state) {
+ super({
+ ...state,
+ articles: (new List(state.articles))
+ .map(article => new SummaryArticle(article))
+ });
+ }
+}
+
+
+class SummaryState extends Record({
+ file: new FileState(),
+ parts: List()
+}) {
+ constructor(state = {}) {
+ super({
+ ...state,
+ file: new FileState(state.file),
+ parts: (new List(state.parts))
+ .map(article => new SummaryPart(article))
+ });
+ }
+
+ static create(state) {
+ return state instanceof SummaryState ?
+ state : new SummaryState(state);
+ }
+}
+
+module.exports = (state, action) => {
+ return SummaryState.create(state);
+};
diff --git a/packages/gitbook-core/src/shapes/File.js b/packages/gitbook-core/src/shapes/File.js
new file mode 100644
index 0000000..cff2219
--- /dev/null
+++ b/packages/gitbook-core/src/shapes/File.js
@@ -0,0 +1,13 @@
+const React = require('react');
+const {
+ oneOf,
+ string,
+ shape
+} = React.PropTypes;
+
+
+module.exports = shape({
+ mtime: string.isRequired,
+ path: string.isRequired,
+ type: oneOf(['markdown', 'asciidoc']).isRequired
+});
diff --git a/packages/gitbook-core/src/shapes/Page.js b/packages/gitbook-core/src/shapes/Page.js
index 11117fe..c589f54 100644
--- a/packages/gitbook-core/src/shapes/Page.js
+++ b/packages/gitbook-core/src/shapes/Page.js
@@ -1,11 +1,16 @@
const React = require('react');
const {
+ oneOf,
string,
+ number,
shape
} = React.PropTypes;
module.exports = shape({
title: string.isRequired,
- content: string.isRequired
+ content: string.isRequired,
+ level: string.isRequired,
+ depth: number.isRequired,
+ dir: oneOf(['ltr', 'rtl']).isRequired
});
diff --git a/packages/gitbook-core/src/shapes/Summary.js b/packages/gitbook-core/src/shapes/Summary.js
new file mode 100644
index 0000000..7efe4e0
--- /dev/null
+++ b/packages/gitbook-core/src/shapes/Summary.js
@@ -0,0 +1,13 @@
+const React = require('react');
+const {
+ arrayOf,
+ shape
+} = React.PropTypes;
+
+const File = require('./File');
+const Part = require('./SummaryPart');
+
+module.exports = shape({
+ file: File.isRequired,
+ parts: arrayOf(Part).isRequired
+});
diff --git a/packages/gitbook-core/src/shapes/SummaryArticle.js b/packages/gitbook-core/src/shapes/SummaryArticle.js
new file mode 100644
index 0000000..d13bb31
--- /dev/null
+++ b/packages/gitbook-core/src/shapes/SummaryArticle.js
@@ -0,0 +1,20 @@
+/* eslint-disable no-use-before-define */
+
+const React = require('react');
+const {
+ arrayOf,
+ string,
+ number,
+ shape
+} = React.PropTypes;
+
+const Article = shape({
+ title: string.isRequired,
+ depth: number.isRequired,
+ path: string,
+ ref: string,
+ level: string,
+ articles: arrayOf(Article)
+});
+
+module.exports = Article;
diff --git a/packages/gitbook-core/src/shapes/SummaryPart.js b/packages/gitbook-core/src/shapes/SummaryPart.js
new file mode 100644
index 0000000..75d5602
--- /dev/null
+++ b/packages/gitbook-core/src/shapes/SummaryPart.js
@@ -0,0 +1,13 @@
+const React = require('react');
+const {
+ arrayOf,
+ string,
+ shape
+} = React.PropTypes;
+
+const Article = require('./SummaryArticle');
+
+module.exports = shape({
+ title: string.isRequired,
+ articles: arrayOf(Article)
+});
diff --git a/packages/gitbook-core/src/shapes/index.js b/packages/gitbook-core/src/shapes/index.js
index ca95a99..149b5a7 100644
--- a/packages/gitbook-core/src/shapes/index.js
+++ b/packages/gitbook-core/src/shapes/index.js
@@ -1,4 +1,8 @@
module.exports = {
- Page: require('./Page')
+ Page: require('./Page'),
+ File: require('./File'),
+ Summary: require('./Summary'),
+ SummaryPart: require('./SummaryPart'),
+ SummaryArticle: require('./SummaryArticle')
};