summaryrefslogtreecommitdiffstats
path: root/lib/output/generateBook.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-04-29 11:31:54 +0200
committerSamy Pessé <samypesse@gmail.com>2016-04-29 11:31:54 +0200
commitfb37a6bcabf9ec5d9b8b86f1641eb20275b9484d (patch)
tree6dc2b35e03e3238e6a89e329a87f01ba3ff3d731 /lib/output/generateBook.js
parent4f8bdbb5189ddb40923c1e9fdce2ccc833446187 (diff)
downloadgitbook-fb37a6bcabf9ec5d9b8b86f1641eb20275b9484d.zip
gitbook-fb37a6bcabf9ec5d9b8b86f1641eb20275b9484d.tar.gz
gitbook-fb37a6bcabf9ec5d9b8b86f1641eb20275b9484d.tar.bz2
Inherit plugins list from parent output when generating multilingual book
Diffstat (limited to 'lib/output/generateBook.js')
-rw-r--r--lib/output/generateBook.js90
1 files changed, 58 insertions, 32 deletions
diff --git a/lib/output/generateBook.js b/lib/output/generateBook.js
index cd20c8d..6e878e8 100644
--- a/lib/output/generateBook.js
+++ b/lib/output/generateBook.js
@@ -13,40 +13,15 @@ var generateAssets = require('./generateAssets');
var generatePages = require('./generatePages');
/**
- Generate a book using a generator.
-
- The overall process is:
- 1. List and load plugins for this book
- 2. Call hook "config"
- 3. Call hook "init"
- 4. Initialize generator
- 5. List all assets and pages
- 6. Copy all assets to output
- 7. Generate all pages
- 8. Call hook "finish:before"
- 9. Finish generation
- 10. Call hook "finish"
-
+ Process an output to generate the book
@param {Generator} generator
- @param {Book} book
- @param {Object} options
+ @param {Output} output
@return {Promise<Output>}
*/
-function generateBook(generator, book, options) {
- options = generator.Options(options);
- var state = generator.State? generator.State({}) : Immutable.Map();
- var start = Date.now();
-
- return Promise(
- new Output({
- book: book,
- options: options,
- state: state,
- generator: generator.name
- })
- )
+function processOutput(generator, startOutput) {
+ return Pormise(startOutput)
.then(preparePlugins)
.then(preparePages)
.then(prepareAssets)
@@ -97,16 +72,28 @@ function generateBook(generator, book, options) {
.tap(function(output) {
var book = output.getBook();
- var books = book.getBooks();
- var outputRoot = output.getRoot();
if (!book.isMultilingual()) {
return;
}
+ var books = book.getBooks();
+ var outputRoot = output.getRoot();
+ var plugins = output.getPlugins();
+ var state = output.getState();
+
return Promise.forEach(books, function(langBook, language) {
+ // Inherits plugins list, options and state
var langOptions = options.set('root', path.join(outputRoot, language));
- return generateBook(generator, langBook, langOptions);
+ var langOutput = new Output({
+ book: langBook,
+ options: langOptions,
+ state: state,
+ generator: generator.name,
+ plugins: plugins
+ });
+
+ return processOutput(generator, langOutput);
});
})
@@ -139,13 +126,52 @@ function generateBook(generator, book, options) {
}
)
)
+}
+/**
+ Generate a book using a generator.
+
+ The overall process is:
+ 1. List and load plugins for this book
+ 2. Call hook "config"
+ 3. Call hook "init"
+ 4. Initialize generator
+ 5. List all assets and pages
+ 6. Copy all assets to output
+ 7. Generate all pages
+ 8. Call hook "finish:before"
+ 9. Finish generation
+ 10. Call hook "finish"
+
+
+ @param {Generator} generator
+ @param {Book} book
+ @param {Object} options
+
+ @return {Promise<Output>}
+*/
+function generateBook(generator, book, options) {
+ options = generator.Options(options);
+ var state = generator.State? generator.State({}) : Immutable.Map();
+ var start = Date.now();
+
+ return Promise(
+ new Output({
+ book: book,
+ options: options,
+ state: state,
+ generator: generator.name
+ })
+ )
+ .then(processOutput)
.then(function(output) {
var logger = output.getLogger();
var end = Date.now();
var duration = (end - start)/1000;
logger.info.ok('generation finished with success in ' + duration.toFixed(1) + 's !');
+
+ return output;
});
}