summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/output/generateBook.js90
-rw-r--r--lib/plugins/findForBook.js3
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) {