summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-05-12 13:25:09 +0200
committerSamy Pessé <samypesse@gmail.com>2016-05-12 13:25:09 +0200
commitb97d1c7796659336f68c988f02d0f0376d1e9e82 (patch)
tree2cfcf3e7f9aa092b74c88579ff5727ddf5e4567c /lib
parenta091c5b331282bbcc4e0a3b79fbc32dd6f842747 (diff)
downloadgitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.zip
gitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.tar.gz
gitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.tar.bz2
Fix languages not being added to json output
Diffstat (limited to 'lib')
-rw-r--r--lib/json/encodeBook.js4
-rw-r--r--lib/json/encodeLanguages.js26
-rw-r--r--lib/json/index.js3
-rw-r--r--lib/output/__tests__/json.js17
-rw-r--r--lib/output/json/index.js3
-rw-r--r--lib/output/json/onFinish.js25
6 files changed, 71 insertions, 7 deletions
diff --git a/lib/json/encodeBook.js b/lib/json/encodeBook.js
index 9bcb6ee..9d7ec77 100644
--- a/lib/json/encodeBook.js
+++ b/lib/json/encodeBook.js
@@ -4,6 +4,7 @@ var gitbook = require('../gitbook');
var encodeSummary = require('./encodeSummary');
var encodeGlossary = require('./encodeGlossary');
var encodeReadme = require('./encodeReadme');
+var encodeLanguages = require('./encodeLanguages');
/**
Encode a book to JSON
@@ -22,6 +23,9 @@ function encodeBookToJson(book) {
glossary: encodeGlossary(book.getGlossary()),
readme: encodeReadme(book.getReadme()),
config: book.getConfig().getValues().toJS(),
+
+ languages: book.isMultilingual()? encodeLanguages(book.getLanguages()) : undefined,
+
gitbook: {
version: gitbook.version,
time: gitbook.START_TIME
diff --git a/lib/json/encodeLanguages.js b/lib/json/encodeLanguages.js
new file mode 100644
index 0000000..8447e80
--- /dev/null
+++ b/lib/json/encodeLanguages.js
@@ -0,0 +1,26 @@
+var encodeFile = require('./encodeFile');
+
+/**
+ Encode a languages listing to JSON
+
+ @param {Languages}
+ @return {Object}
+*/
+function encodeLanguages(languages) {
+ var file = languages.getFile();
+ var list = languages.getList();
+
+ return {
+ file: encodeFile(file),
+ list: list
+ .valueSeq()
+ .map(function(lang) {
+ return {
+ id: lang.getID(),
+ title: lang.getTitle()
+ };
+ }).toJS()
+ };
+}
+
+module.exports = encodeLanguages;
diff --git a/lib/json/index.js b/lib/json/index.js
index 39cac99..4387ae0 100644
--- a/lib/json/index.js
+++ b/lib/json/index.js
@@ -7,5 +7,6 @@ module.exports = {
encodePage: require('./encodePage'),
encodeSummary: require('./encodeSummary'),
encodeSummaryArticle: require('./encodeSummaryArticle'),
- encodeReadme: require('./encodeReadme')
+ encodeReadme: require('./encodeReadme'),
+ encodeLanguages: require('./encodeLanguages')
};
diff --git a/lib/output/__tests__/json.js b/lib/output/__tests__/json.js
index 46ab42f..9897813 100644
--- a/lib/output/__tests__/json.js
+++ b/lib/output/__tests__/json.js
@@ -25,5 +25,22 @@ describe('JSONGenerator', function() {
expect(folder).toHaveFile('test/page.json');
});
});
+
+ it('should generate a multilingual book', function() {
+ return generateMock(JSONGenerator, {
+ 'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)',
+ 'en': {
+ 'README.md': 'Hello'
+ },
+ 'fr': {
+ 'README.md': 'Bonjour'
+ }
+ })
+ .then(function(folder) {
+ expect(folder).toHaveFile('en/README.json');
+ expect(folder).toHaveFile('fr/README.json');
+ expect(folder).toHaveFile('README.json');
+ });
+ });
});
diff --git a/lib/output/json/index.js b/lib/output/json/index.js
index e24c127..361da06 100644
--- a/lib/output/json/index.js
+++ b/lib/output/json/index.js
@@ -2,5 +2,6 @@
module.exports = {
name: 'json',
Options: require('./options'),
- onPage: require('./onPage')
+ onPage: require('./onPage'),
+ onFinish: require('./onFinish')
};
diff --git a/lib/output/json/onFinish.js b/lib/output/json/onFinish.js
index ff336a2..d41d778 100644
--- a/lib/output/json/onFinish.js
+++ b/lib/output/json/onFinish.js
@@ -2,6 +2,7 @@ var path = require('path');
var Promise = require('../../utils/promise');
var fs = require('../../utils/fs');
+var JSONUtils = require('../../json');
/**
Finish the generation
@@ -21,11 +22,25 @@ function onFinish(output) {
var languages = book.getLanguages();
var mainLanguage = languages.getDefaultLanguage();
- // Copy README.json from it
- return fs.copy(
- path.resolve(outputRoot, mainLanguage.getID(), 'README.json'),
- path.resolve(outputRoot, 'README.json')
- )
+ // Read the main JSON
+ return fs.readFile(path.resolve(outputRoot, mainLanguage.getID(), 'README.json'), 'utf8')
+
+ // Extend the JSON
+ .then(function(content) {
+ var json = JSON.parse(content);
+
+ json.languages = JSONUtils.encodeLanguages(languages);
+
+ return json;
+ })
+
+ .then(function(json) {
+ return fs.writeFile(
+ path.resolve(outputRoot, 'README.json'),
+ JSON.stringify(json, null, 4)
+ );
+ })
+
.thenResolve(output);
}