diff options
Diffstat (limited to 'lib/output')
-rw-r--r-- | lib/output/callHook.js | 15 | ||||
-rw-r--r-- | lib/output/generateAssets.js | 23 | ||||
-rw-r--r-- | lib/output/generateBook.js | 62 | ||||
-rw-r--r-- | lib/output/generatePage.js | 9 | ||||
-rw-r--r-- | lib/output/generatePages.js | 23 | ||||
-rw-r--r-- | lib/output/generators/json.js | 26 | ||||
-rw-r--r-- | lib/output/index.js | 11 | ||||
-rw-r--r-- | lib/output/json/index.js | 6 | ||||
-rw-r--r-- | lib/output/json/onPage.js | 20 | ||||
-rw-r--r-- | lib/output/json/options.js | 8 | ||||
-rw-r--r-- | lib/output/prepareAssets.js | 19 | ||||
-rw-r--r-- | lib/output/preparePages.js | 18 | ||||
-rw-r--r-- | lib/output/preparePlugins.js | 24 |
13 files changed, 191 insertions, 73 deletions
diff --git a/lib/output/callHook.js b/lib/output/callHook.js new file mode 100644 index 0000000..0db1ff1 --- /dev/null +++ b/lib/output/callHook.js @@ -0,0 +1,15 @@ + +/** + Call a "global" hook for an output + + @param {String} name + @param {Output} output + @return {Promise<Output>} +*/ +function callHook(name, output) { + +} + + + +module.exports = callHook; diff --git a/lib/output/generateAssets.js b/lib/output/generateAssets.js new file mode 100644 index 0000000..04ca05d --- /dev/null +++ b/lib/output/generateAssets.js @@ -0,0 +1,23 @@ +var Promise = require('../utils/promise'); + +/** + Output all assets using a generator + + @param {Generator} generator + @param {Output} output + @return {Promise<Output>} +*/ +function generateAssets(generator, output) { + var assets = output.getAssets(); + + // Is generator ignoring assets? + if (!generator.onAsset) { + return Promise(output); + } + + return Promise.reduce(assets, function(out, assetFile) { + return generator.onAsset(out, assetFile); + }, output); +} + +module.exports = generateAssets; diff --git a/lib/output/generateBook.js b/lib/output/generateBook.js index 3f04875..fb03418 100644 --- a/lib/output/generateBook.js +++ b/lib/output/generateBook.js @@ -1,42 +1,46 @@ -var Parse = require('../parse'); +var Output = require('../models/output'); +var Promise = require('../utils/promise'); -/** - List all assets for a book +var callHook = require('./callHook'); +var preparePlugins = require('./preparePlugins'); +var preparePages = require('./preparePages'); +var prepareAssets = require('./prepareAssets'); +var generateAssets = require('./generateAssets'); +var generatePages = require('./generatePages'); - @param {Book} book - @param {Map<String:Page>} pages - @param -*/ -function listAssets(book, pages) { - var fs = book.getContentFS(); - - return fs.listAllFiles() - .then(function(files) { - return files.filterNot(function(file) { - return ( - book.isContentFileIgnored(file) || - pages.has(file) - ); - }); - }); -} +/** + 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" -/** - Generate a book using a generator @param {Generator} generator @param {Book} book + @param {Object} options @return {Promise} */ -function generateBook(generator, book) { - // List all parsable pages - return Parse.parsePagesList(book) - .then(function(pages) { - return listAssets(book, pages); - }); +function generateBook(generator, book, options) { + options = generator.Options(options); + + return Promise( + Output.createForBook(book, options) + ) + .then(preparePlugins) + .then(preparePages) + .then(prepareAssets) + .then(generateAssets.bind(null, generator)) + .then(generatePages.bind(null, generator)); } - module.exports = generateBook; diff --git a/lib/output/generatePage.js b/lib/output/generatePage.js deleted file mode 100644 index 9afb50a..0000000 --- a/lib/output/generatePage.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - Generate a page using a generator -*/ -function generatePage(generator, book, page) { - -} - - -module.exports = generatePage; diff --git a/lib/output/generatePages.js b/lib/output/generatePages.js new file mode 100644 index 0000000..406f242 --- /dev/null +++ b/lib/output/generatePages.js @@ -0,0 +1,23 @@ +var Promise = require('../utils/promise'); + +/** + Output all pages using a generator + + @param {Generator} generator + @param {Output} output + @return {Promise<Output>} +*/ +function generatePages(generator, output) { + var pages = output.getPages(); + + // Is generator ignoring assets? + if (!generator.onPage) { + return Promise(output); + } + + return Promise.reduce(pages, function(out, assetFile) { + return generator.onPage(out, assetFile); + }, output); +} + +module.exports = generatePages; diff --git a/lib/output/generators/json.js b/lib/output/generators/json.js deleted file mode 100644 index e75ae7c..0000000 --- a/lib/output/generators/json.js +++ /dev/null @@ -1,26 +0,0 @@ -var Promise = require('../../utils/promise'); - -var Modifier = require('../'); - - -function JSONGenerator(book) { - this.book = book; -} - - -JSONGenerator.prototype.onPage = function(page) { - return Modifier.HTMLTransformations(page, [ - Modifier.svgToImg(), - Modifier.svgToPng() - ]) - .then(function() { - - - }); -}; - -JSONGenerator.prototype.onAsset = function(file) { - -}; - -module.exports = JSONGenerator;
\ No newline at end of file diff --git a/lib/output/index.js b/lib/output/index.js index 67ca5ee..45bdf65 100644 --- a/lib/output/index.js +++ b/lib/output/index.js @@ -1,11 +1,4 @@ - - -function generate(book, output) { - -} - - - module.exports = { - generate: generate + generate: require('./generateBook'), + JSONGenerator: require('./json') }; diff --git a/lib/output/json/index.js b/lib/output/json/index.js new file mode 100644 index 0000000..f721d22 --- /dev/null +++ b/lib/output/json/index.js @@ -0,0 +1,6 @@ + + +module.exports = { + Options: require('./options'), + onPage: require('./onPage') +}; diff --git a/lib/output/json/onPage.js b/lib/output/json/onPage.js new file mode 100644 index 0000000..3ef5c74 --- /dev/null +++ b/lib/output/json/onPage.js @@ -0,0 +1,20 @@ +var Modifier = require('../modifier'); + +/** + Write a page as a json file + + @param {Output} output + @param {Page} page +*/ +function onPage(output, page) { + var options = output. + + return Modifier.applyHTMLTransformations(page, [ + Modifier.HTML.resolveLinks() + ]) + .then(function(newPage) { + + }); +} + +module.exports = onPage; diff --git a/lib/output/json/options.js b/lib/output/json/options.js new file mode 100644 index 0000000..79167b1 --- /dev/null +++ b/lib/output/json/options.js @@ -0,0 +1,8 @@ +var Immutable = require('immutable'); + +var Options = Immutable.Record({ + // Root folder for the output + root: String() +}); + +module.exports = Options; diff --git a/lib/output/prepareAssets.js b/lib/output/prepareAssets.js new file mode 100644 index 0000000..19aabef --- /dev/null +++ b/lib/output/prepareAssets.js @@ -0,0 +1,19 @@ +var Parse = require('../parse'); + +/** + List all assets in the book + + @param {Output} + @return {Promise<Output>} +*/ +function prepareAssets(output) { + var book = output.getBook(); + var pages = output.getPages(); + + return Parse.listAssets(book, pages) + .then(function(assets) { + return output.set('assets', assets); + }); +} + +module.exports = prepareAssets; diff --git a/lib/output/preparePages.js b/lib/output/preparePages.js new file mode 100644 index 0000000..396edde --- /dev/null +++ b/lib/output/preparePages.js @@ -0,0 +1,18 @@ +var Parse = require('../parse'); + +/** + List and prepare all pages + + @param {Output} + @return {Promise<Output>} +*/ +function preparePages(output) { + var book = output.getBook(); + + return Parse.parsePagesList(book) + .then(function(pages) { + return output.set('pages', pages); + }); +} + +module.exports = preparePages; diff --git a/lib/output/preparePlugins.js b/lib/output/preparePlugins.js new file mode 100644 index 0000000..5768e68 --- /dev/null +++ b/lib/output/preparePlugins.js @@ -0,0 +1,24 @@ +var Plugins = require('../plugins'); + +/** + Load and setup plugins + + @param {Output} + @return {Promise<Output>} +*/ +function preparePlugins(output) { + var book = output.getBook(); + + return Plugins.loadForBook(book) + .then(function(plugins) { + return Plugins.validateConfig(book, plugins) + .then(function(newBook) { + return output.merge({ + book: newBook, + plugins: plugins + }); + }); + }); +} + +module.exports = preparePlugins; |