summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-02-24 13:35:59 +0100
committerSamy Pessé <samypesse@gmail.com>2016-02-24 13:35:59 +0100
commite85ad95bcf3627a223b3a2eacaa29835142249eb (patch)
tree1195387b49276e8b0b5b1c9185371c9f96a9ad38
parentbd73c7978743329f893c1125d1645b8aa24eb7d8 (diff)
downloadgitbook-e85ad95bcf3627a223b3a2eacaa29835142249eb.zip
gitbook-e85ad95bcf3627a223b3a2eacaa29835142249eb.tar.gz
gitbook-e85ad95bcf3627a223b3a2eacaa29835142249eb.tar.bz2
Generate multi-lingual index
-rw-r--r--lib/output/ebook.js5
-rw-r--r--lib/output/website.js19
-rw-r--r--test/mock.js17
-rw-r--r--test/output-website.js36
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');
+ });
});
});