diff options
-rw-r--r-- | lib/output/ebook.js | 5 | ||||
-rw-r--r-- | lib/output/website.js | 19 | ||||
-rw-r--r-- | test/mock.js | 17 | ||||
-rw-r--r-- | test/output-website.js | 36 |
4 files changed, 76 insertions, 1 deletions
diff --git a/lib/output/ebook.js b/lib/output/ebook.js index fc9cfd7..801d058 100644 --- a/lib/output/ebook.js +++ b/lib/output/ebook.js @@ -159,4 +159,9 @@ EbookOutput.prototype.ebookConvertOption = function() { }); }; +// Don't write multi-lingual index for wbook +EbookOutput.prototype.outputMultilingualIndex = function() { + +}; + module.exports = EbookOutput; diff --git a/lib/output/website.js b/lib/output/website.js index 6961a28..0beef24 100644 --- a/lib/output/website.js +++ b/lib/output/website.js @@ -210,11 +210,30 @@ WebsiteOutput.prototype.finish = function() { .then(function() { if (that.book.isLanguageBook()) return; return that.plugins.copyResources(that.name, that.resolve('gitbook')); + }) + + // Generate homepage to select languages + .then(function() { + if (!that.book.isMultilingual()) return; + return that.outputMultilingualIndex(); }); }; // ----- Utilities ---- +// Write multi-languages index +WebsiteOutput.prototype.outputMultilingualIndex = function() { + var that = this; + + return that.render('languages', that.getContext()) + .then(function(html) { + return that.writeFile( + 'index.html', + html + ); + }); +}; + // Render a template using nunjucks // Templates are stored in `_layouts` folders WebsiteOutput.prototype.render = function(tpl, context) { diff --git a/test/mock.js b/test/mock.js index 1bb92e2..5ff9f63 100644 --- a/test/mock.js +++ b/test/mock.js @@ -84,6 +84,22 @@ function outputDefaultBook(Output, files, summary, opts) { }); } +// Output a book with a specific generator +function outputBook(Output, files, opts) { + return setupBook(files, opts) + .then(function(book) { + // Parse the book + return book.parse() + + // Start generation + .then(function() { + var output = new Output(book); + return output.generate() + .thenResolve(output); + }); + }); +} + // Log an error function logError(err) { console.log(err.stack || err); @@ -93,6 +109,7 @@ module.exports = { fs: nodeFS, setupFS: setupFS, setupBook: setupBook, + outputBook: outputBook, setupDefaultBook: setupDefaultBook, outputDefaultBook: outputDefaultBook, logError: logError diff --git a/test/output-website.js b/test/output-website.js index 69adf88..19459b3 100644 --- a/test/output-website.js +++ b/test/output-website.js @@ -25,7 +25,6 @@ describe('Website Output', function() { it('should correctly copy plugins', function() { output.should.have.file('gitbook/gitbook-plugin-highlight/website.css'); }); - }); describe('Book with chapters', function() { @@ -58,7 +57,42 @@ describe('Website Output', function() { output.should.have.file('hello/index.html'); output.should.have.file('hello/test.html'); }); + }); + + describe('Multilingual Book', function() { + var output; + + before(function() { + return mock.outputBook(WebsiteOutput, { + 'LANGS.md': '# Languages\n\n' + + '* [en](./en)\n' + + '* [fr](./fr)\n\n', + 'en/README.md': '# Hello', + 'fr/README.md': '# Bonjour' + + }) + .then(function(_output) { + output = _output; + }); + }); + it('should correctly generate an index.html for each language', function() { + output.should.have.file('en/index.html'); + output.should.have.file('fr/index.html'); + }); + + it('should correctly copy assets', function() { + output.should.have.file('gitbook/app.js'); + }); + + it('should not copy assets for each language', function() { + output.should.have.not.file('en/gitbook/app.js'); + output.should.have.not.file('fr/gitbook/app.js'); + }); + + it('should correctly generate an index.html', function() { + output.should.have.file('index.html'); + }); }); }); |