diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-09-22 10:37:06 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-09-22 10:37:06 +0200 |
commit | f49089a7d3a6fd5523c71e06e5e0d132bb6ffd9a (patch) | |
tree | 4656866589cd5e46650b867cc2447619ea11bb3a /packages/gitbook-core/src | |
parent | 0b1888e184d3f995c3130daf794416ad0a4312bc (diff) | |
download | gitbook-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.js | 2 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/file.js | 16 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/index.js | 9 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/page.js | 20 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/readme.js | 21 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/summary.js | 56 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/File.js | 13 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/Page.js | 7 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/Summary.js | 13 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/SummaryArticle.js | 20 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/SummaryPart.js | 13 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/index.js | 6 |
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') }; |