diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-12 13:25:09 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-12 13:25:09 +0200 |
commit | b97d1c7796659336f68c988f02d0f0376d1e9e82 (patch) | |
tree | 2cfcf3e7f9aa092b74c88579ff5727ddf5e4567c | |
parent | a091c5b331282bbcc4e0a3b79fbc32dd6f842747 (diff) | |
download | gitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.zip gitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.tar.gz gitbook-b97d1c7796659336f68c988f02d0f0376d1e9e82.tar.bz2 |
Fix languages not being added to json output
-rw-r--r-- | lib/json/encodeBook.js | 4 | ||||
-rw-r--r-- | lib/json/encodeLanguages.js | 26 | ||||
-rw-r--r-- | lib/json/index.js | 3 | ||||
-rw-r--r-- | lib/output/__tests__/json.js | 17 | ||||
-rw-r--r-- | lib/output/json/index.js | 3 | ||||
-rw-r--r-- | lib/output/json/onFinish.js | 25 |
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); } |