summaryrefslogtreecommitdiffstats
path: root/lib/output
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output')
-rw-r--r--lib/output/__tests__/website.js27
-rw-r--r--lib/output/generateBook.js11
-rw-r--r--lib/output/website/onFinish.js26
3 files changed, 56 insertions, 8 deletions
diff --git a/lib/output/__tests__/website.js b/lib/output/__tests__/website.js
index 7afa737..54938c8 100644
--- a/lib/output/__tests__/website.js
+++ b/lib/output/__tests__/website.js
@@ -25,5 +25,32 @@ describe('WebsiteGenerator', function() {
expect(folder).toHaveFile('test/page.html');
});
});
+
+ pit('should generate a multilingual book', function() {
+ return generateMock(WebsiteGenerator, {
+ 'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)',
+ 'en': {
+ 'README.md': 'Hello'
+ },
+ 'fr': {
+ 'README.md': 'Bonjour'
+ }
+ })
+ .then(function(folder) {
+ // It should generate languages
+ expect(folder).toHaveFile('en/index.html');
+ expect(folder).toHaveFile('fr/index.html');
+
+ // Should not copy languages as assets
+ expect(folder).not.toHaveFile('en/README.md');
+ expect(folder).not.toHaveFile('fr/README.md');
+
+ // Should copy assets only once
+ expect(folder).toHaveFile('gitbook/style.css');
+ expect(folder).not.toHaveFile('en/gitbook/style.css');
+
+ expect(folder).toHaveFile('index.html');
+ });
+ });
});
diff --git a/lib/output/generateBook.js b/lib/output/generateBook.js
index 6e878e8..c5d61f8 100644
--- a/lib/output/generateBook.js
+++ b/lib/output/generateBook.js
@@ -21,7 +21,7 @@ var generatePages = require('./generatePages');
@return {Promise<Output>}
*/
function processOutput(generator, startOutput) {
- return Pormise(startOutput)
+ return Promise(startOutput)
.then(preparePlugins)
.then(preparePages)
.then(prepareAssets)
@@ -81,10 +81,11 @@ function processOutput(generator, startOutput) {
var outputRoot = output.getRoot();
var plugins = output.getPlugins();
var state = output.getState();
+ var options = output.getOptions();
- return Promise.forEach(books, function(langBook, language) {
+ return Promise.forEach(books, function(langBook) {
// Inherits plugins list, options and state
- var langOptions = options.set('root', path.join(outputRoot, language));
+ var langOptions = options.set('root', path.join(outputRoot, langBook.getLanguage()));
var langOutput = new Output({
book: langBook,
options: langOptions,
@@ -155,7 +156,8 @@ function generateBook(generator, book, options) {
var state = generator.State? generator.State({}) : Immutable.Map();
var start = Date.now();
- return Promise(
+ return processOutput(
+ generator,
new Output({
book: book,
options: options,
@@ -163,7 +165,6 @@ function generateBook(generator, book, options) {
generator: generator.name
})
)
- .then(processOutput)
.then(function(output) {
var logger = output.getLogger();
var end = Date.now();
diff --git a/lib/output/website/onFinish.js b/lib/output/website/onFinish.js
index a424250..e3560e2 100644
--- a/lib/output/website/onFinish.js
+++ b/lib/output/website/onFinish.js
@@ -1,15 +1,35 @@
var Promise = require('../../utils/promise');
+var JSONUtils = require('../../json');
+var Templating = require('../../templating');
+var writeFile = require('../helper/writeFile');
+var createTemplateEngine = require('./createTemplateEngine');
/**
- Finish the generation
+ Finish the generation, write the languages index
@param {Output}
@return {Output}
*/
function onFinish(output) {
- // todo: render language index
+ var book = output.getBook();
+ var options = output.getOptions();
+ var prefix = options.get('prefix');
- return Promise(output);
+ if (!book.isMultilingual()) {
+ return Promise(output);
+ }
+
+ var filePath = 'index.html';
+ var engine = createTemplateEngine(output, filePath);
+ var context = JSONUtils.encodeOutput(output);
+
+ // Render the theme
+ return Templating.renderFile(engine, prefix + '/languages.html', context)
+
+ // Write it to the disk
+ .then(function(html) {
+ return writeFile(output, filePath, html);
+ });
}
module.exports = onFinish;