diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-04-29 11:31:54 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-04-29 11:31:54 +0200 |
commit | fb37a6bcabf9ec5d9b8b86f1641eb20275b9484d (patch) | |
tree | 6dc2b35e03e3238e6a89e329a87f01ba3ff3d731 /lib/output/generateBook.js | |
parent | 4f8bdbb5189ddb40923c1e9fdce2ccc833446187 (diff) | |
download | gitbook-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.js | 90 |
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; }); } |