summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/gitbook-core/src/models/File.js4
-rw-r--r--packages/gitbook-core/src/models/Language.js12
-rw-r--r--packages/gitbook-core/src/models/Languages.js40
-rw-r--r--packages/gitbook-core/src/reducers/index.js3
-rw-r--r--packages/gitbook-core/src/reducers/languages.js12
-rw-r--r--packages/gitbook-core/src/shapes/Language.js7
-rw-r--r--packages/gitbook-core/src/shapes/Languages.js12
-rw-r--r--packages/gitbook-core/src/shapes/index.js2
-rw-r--r--packages/gitbook/src/json/encodeLanguages.js4
-rw-r--r--packages/gitbook/src/json/encodeState.js3
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