diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-10-14 23:05:37 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-10-14 23:05:37 +0200 |
commit | f262a7cd89d0d555c27bf3a25bb2054a5af1e7fd (patch) | |
tree | 1512b033eee4eb8146096a039c1f547d1e184972 | |
parent | b63b0cc50d1714c428ff6c540d4b2773e2c51347 (diff) | |
download | gitbook-f262a7cd89d0d555c27bf3a25bb2054a5af1e7fd.zip gitbook-f262a7cd89d0d555c27bf3a25bb2054a5af1e7fd.tar.gz gitbook-f262a7cd89d0d555c27bf3a25bb2054a5af1e7fd.tar.bz2 |
Add languages to client side state, and add "current" to json repr
-rw-r--r-- | packages/gitbook-core/src/models/File.js | 4 | ||||
-rw-r--r-- | packages/gitbook-core/src/models/Language.js | 12 | ||||
-rw-r--r-- | packages/gitbook-core/src/models/Languages.js | 40 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/index.js | 3 | ||||
-rw-r--r-- | packages/gitbook-core/src/reducers/languages.js | 12 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/Language.js | 7 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/Languages.js | 12 | ||||
-rw-r--r-- | packages/gitbook-core/src/shapes/index.js | 2 | ||||
-rw-r--r-- | packages/gitbook/src/json/encodeLanguages.js | 4 | ||||
-rw-r--r-- | packages/gitbook/src/json/encodeState.js | 3 |
10 files changed, 94 insertions, 5 deletions
diff --git a/packages/gitbook-core/src/models/File.js b/packages/gitbook-core/src/models/File.js index 74db11e..c5ac654 100644 --- a/packages/gitbook-core/src/models/File.js +++ b/packages/gitbook-core/src/models/File.js @@ -35,7 +35,7 @@ class File extends Record(DEFAULTS) { /** * Return true if file is an instance of File * @param {Mixed} file - * @return {Boolean} + * @return {Boolean} isFile */ static is(file) { return (file instanceof File); @@ -44,7 +44,7 @@ class File extends Record(DEFAULTS) { /** * Create a file instance * @param {Mixed|File} file - * @return {File} + * @return {File} file */ static create(file) { return File.is(file) ? diff --git a/packages/gitbook-core/src/models/Language.js b/packages/gitbook-core/src/models/Language.js new file mode 100644 index 0000000..20fc237 --- /dev/null +++ b/packages/gitbook-core/src/models/Language.js @@ -0,0 +1,12 @@ +const { Record } = require('immutable'); + +const DEFAULTS = { + id: null, + title: null +}; + +class Language extends Record(DEFAULTS) { + +} + +module.exports = Language; diff --git a/packages/gitbook-core/src/models/Languages.js b/packages/gitbook-core/src/models/Languages.js new file mode 100644 index 0000000..b698d14 --- /dev/null +++ b/packages/gitbook-core/src/models/Languages.js @@ -0,0 +1,40 @@ +const { Record, List } = require('immutable'); +const Language = require('./Language'); +const File = require('./File'); + +const DEFAULTS = { + current: String(), + file: new File(), + list: List() +}; + +class Languages extends Record(DEFAULTS) { + constructor(spec = {}) { + super({ + ...spec, + file: File.create(spec.file), + list: List(spec.list).map(lang => new Language(lang)) + }); + } + + /** + * Return true if file is an instance of Languages + * @param {Mixed} langs + * @return {Boolean} + */ + static is(langs) { + return (langs instanceof Languages); + } + + /** + * Create a Languages instance + * @param {Mixed|Languages} langs + * @return {Languages} + */ + static create(langs) { + return Languages.is(langs) ? + langs : new Languages(langs); + } +} + +module.exports = Languages; diff --git a/packages/gitbook-core/src/reducers/index.js b/packages/gitbook-core/src/reducers/index.js index fc80b4a..a211d3b 100644 --- a/packages/gitbook-core/src/reducers/index.js +++ b/packages/gitbook-core/src/reducers/index.js @@ -10,5 +10,6 @@ module.exports = composeReducer( createReducer('file', require('./file')), createReducer('page', require('./page')), createReducer('summary', require('./summary')), - createReducer('readme', require('./readme')) + createReducer('readme', require('./readme')), + createReducer('languages', require('./languages')) ); diff --git a/packages/gitbook-core/src/reducers/languages.js b/packages/gitbook-core/src/reducers/languages.js new file mode 100644 index 0000000..0ec2ae4 --- /dev/null +++ b/packages/gitbook-core/src/reducers/languages.js @@ -0,0 +1,12 @@ +const Languages = require('../models/Languages'); + +module.exports = (state, action) => { + state = Languages.create(state); + + switch (action.type) { + + default: + return state; + + } +}; diff --git a/packages/gitbook-core/src/shapes/Language.js b/packages/gitbook-core/src/shapes/Language.js new file mode 100644 index 0000000..eea37a7 --- /dev/null +++ b/packages/gitbook-core/src/shapes/Language.js @@ -0,0 +1,7 @@ +const React = require('react'); +const { string, shape } = React.PropTypes; + +module.exports = shape({ + id: string.isRequired, + title: string.isRequired +}); diff --git a/packages/gitbook-core/src/shapes/Languages.js b/packages/gitbook-core/src/shapes/Languages.js new file mode 100644 index 0000000..076aec5 --- /dev/null +++ b/packages/gitbook-core/src/shapes/Languages.js @@ -0,0 +1,12 @@ +const React = require('react'); +const { listOf } = require('react-immutable-proptypes'); +const { shape, string } = React.PropTypes; + +const fileShape = require('./File'); +const languageShape = require('./Language'); + +module.exports = shape({ + current: string.isRequired, + file: fileShape.isRequired, + list: listOf(languageShape).isRequired +}); diff --git a/packages/gitbook-core/src/shapes/index.js b/packages/gitbook-core/src/shapes/index.js index 8b28842..f56b78c 100644 --- a/packages/gitbook-core/src/shapes/index.js +++ b/packages/gitbook-core/src/shapes/index.js @@ -9,6 +9,8 @@ module.exports = { Page: require('./Page'), File: require('./File'), History: require('./History'), + Language: require('./Language'), + Languages: require('./Languages'), Location: require('./Location'), Readme: require('./Readme'), Summary: require('./Summary'), diff --git a/packages/gitbook/src/json/encodeLanguages.js b/packages/gitbook/src/json/encodeLanguages.js index e1ef2ef..809cfb2 100644 --- a/packages/gitbook/src/json/encodeLanguages.js +++ b/packages/gitbook/src/json/encodeLanguages.js @@ -4,15 +4,17 @@ const encodeFile = require('./encodeFile'); * Encode a languages listing to JSON * * @param {Languages} languages + * @param {String} currentLanguage * @param {URIIndex} urls * @return {JSON} json */ -function encodeLanguages(languages, urls) { +function encodeLanguages(languages, currentLanguage, urls) { const file = languages.getFile(); const list = languages.getList(); return { file: encodeFile(file, urls), + current: currentLanguage, list: list .valueSeq() .map(function(lang) { diff --git a/packages/gitbook/src/json/encodeState.js b/packages/gitbook/src/json/encodeState.js index fb3e164..faac972 100644 --- a/packages/gitbook/src/json/encodeState.js +++ b/packages/gitbook/src/json/encodeState.js @@ -31,7 +31,8 @@ function encodeStateToJSON(output, page) { glossary: encodeGlossary(book.getGlossary(), urls), readme: encodeReadme(book.getReadme(), urls), config: book.getConfig().getValues().toJS(), - languages: book.isMultilingual() ? encodeLanguages(book.getLanguages(), urls) : undefined, + languages: book.isMultilingual() ? + encodeLanguages(book.getLanguages(), book.getLanguage(), urls) : undefined, page: page ? encodePage(page, book.getSummary(), urls) : undefined, file: page ? encodeFile(page.getFile(), urls) : undefined |