mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-23 02:53:29 +00:00
Add languages to client side state, and add "current" to json repr
This commit is contained in:
@@ -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) ?
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
const { Record } = require('immutable');
|
||||
|
||||
const DEFAULTS = {
|
||||
id: null,
|
||||
title: null
|
||||
};
|
||||
|
||||
class Language extends Record(DEFAULTS) {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Language;
|
||||
@@ -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;
|
||||
@@ -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'))
|
||||
);
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
const Languages = require('../models/Languages');
|
||||
|
||||
module.exports = (state, action) => {
|
||||
state = Languages.create(state);
|
||||
|
||||
switch (action.type) {
|
||||
|
||||
default:
|
||||
return state;
|
||||
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
const React = require('react');
|
||||
const { string, shape } = React.PropTypes;
|
||||
|
||||
module.exports = shape({
|
||||
id: string.isRequired,
|
||||
title: string.isRequired
|
||||
});
|
||||
@@ -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
|
||||
});
|
||||
@@ -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'),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user