diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/output/generateBook.js | 90 | ||||
-rw-r--r-- | lib/plugins/findForBook.js | 3 |
2 files changed, 60 insertions, 33 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; }); } diff --git a/lib/plugins/findForBook.js b/lib/plugins/findForBook.js index af0c1ee..47b8fc4 100644 --- a/lib/plugins/findForBook.js +++ b/lib/plugins/findForBook.js @@ -14,8 +14,9 @@ function findForBook(book) { return Promise.all([ findInstalled(path.resolve(__dirname, '../..')), findInstalled(book.getRoot()) - // todo: list for parent of multilingual ]) + + // Merge all plugins .then(function(results) { return Immutable.List(results) .reduce(function(out, result) { |