diff options
-rw-r--r-- | lib/api/index.js | 5 | ||||
-rw-r--r-- | lib/models/summary.js | 31 | ||||
-rw-r--r-- | lib/models/summaryArticle.js | 8 | ||||
-rw-r--r-- | lib/output/callPageHook.js | 14 | ||||
-rw-r--r-- | lib/output/generateBook.js | 6 | ||||
-rw-r--r-- | lib/output/generatePage.js | 13 |
6 files changed, 57 insertions, 20 deletions
diff --git a/lib/api/index.js b/lib/api/index.js new file mode 100644 index 0000000..213ef1a --- /dev/null +++ b/lib/api/index.js @@ -0,0 +1,5 @@ + +module.exports = { + encodePage: require('./encodePage'), + decodePage: require('./decodePage') +}; diff --git a/lib/models/summary.js b/lib/models/summary.js index d0dc8af..d1df91f 100644 --- a/lib/models/summary.js +++ b/lib/models/summary.js @@ -7,7 +7,7 @@ var SummaryArticle = require('./summaryArticle'); var Summary = Immutable.Record({ file: File(), parts: Immutable.List() -}); +}, 'Summary'); Summary.prototype.getFile = function() { return this.get('file'); @@ -18,27 +18,44 @@ Summary.prototype.getParts = function() { }; /** + Return an article using an iterator to find it + + @param {Function} iter + @return {Article} +*/ +Summary.prototype.getArticle = function(iter) { + var parts = this.getParts(); + + return parts.reduce(function(result, part) { + if (result) return result; + + return SummaryArticle.findArticle(part, iter); + }, null); +}; + + +/** Return a part/article by its level @param {String} level - @return {Part|Article} + @return {Article} */ Summary.prototype.getByLevel = function(level) { - return SummaryArticle.findArticle(this, function(article) { + return this.getArticle(function(article) { return (article.getLevel() === level); - }, 'getParts'); + }); }; /** Return an article by its path @param {String} filePath - @return {Part|Article} + @return {Article} */ Summary.prototype.getByPath = function(filePath) { - return SummaryArticle.findArticle(this, function(article) { + return this.getArticle(function(article) { return (article.getPath() === filePath); - }, 'getParts'); + }); }; /** diff --git a/lib/models/summaryArticle.js b/lib/models/summaryArticle.js index d6cd045..ec1104c 100644 --- a/lib/models/summaryArticle.js +++ b/lib/models/summaryArticle.js @@ -11,7 +11,7 @@ var SummaryArticle = Immutable.Record({ title: String(), ref: String(), articles: Immutable.List() -}); +}, 'SummaryArticle'); SummaryArticle.prototype.getLevel = function() { return this.get('level'); @@ -125,12 +125,10 @@ SummaryArticle.create = function(def, level) { @param {Article|Part} base @param {Function(article)} iter - @param {String} method @return {Article} */ -SummaryArticle.findArticle = function(base, iter, method) { - method = method || 'getArticles'; - var articles = base[method](); +SummaryArticle.findArticle = function(base, iter) { + var articles = base.getArticles(); return articles.reduce(function(result, article) { if (result) return result; diff --git a/lib/output/callPageHook.js b/lib/output/callPageHook.js index ed80823..6f6bcbb 100644 --- a/lib/output/callPageHook.js +++ b/lib/output/callPageHook.js @@ -1,6 +1,8 @@ var Api = require('../api'); var callHook = require('./callHook'); +var Promise = require('../utils/promise'); + /** Call a hook for a specific page @@ -10,19 +12,21 @@ var callHook = require('./callHook'); @return {Promise<Page>} */ function callPageHook(name, output, page) { - return callHook( + return Promise(page); + + /*return callHook( name, function(out) { - return Api.encodePage(output, page); + return Api.encodePage(out, page); }, - function(result) { - return Api.decodePage(output, page, result); + function(out, result) { + return Api.decodePage(out, page, result); }, output - ); + );*/ } module.exports = callPageHook; diff --git a/lib/output/generateBook.js b/lib/output/generateBook.js index ca19067..1fe75fd 100644 --- a/lib/output/generateBook.js +++ b/lib/output/generateBook.js @@ -33,6 +33,7 @@ var generatePages = require('./generatePages'); */ function generateBook(generator, book, options) { options = generator.Options(options); + var start = Date.now(); return Promise( Output.createForBook(book, options) @@ -117,7 +118,10 @@ function generateBook(generator, book, options) { .then(function(output) { var logger = output.getLogger(); - logger.info.ok('generation finished with success!'); + var end = Date.now(); + var duration = (end - start)/1000; + + logger.info.ok('generation finished with success in ' + duration.toFixed(1) + 's !'); }); } diff --git a/lib/output/generatePage.js b/lib/output/generatePage.js index 113bf22..aa3b376 100644 --- a/lib/output/generatePage.js +++ b/lib/output/generatePage.js @@ -4,6 +4,7 @@ var error = require('../utils/error'); var Parse = require('../parse'); var Templating = require('../templating'); var createTemplateEngine = require('./createTemplateEngine'); +var callPageHook = require('./callPageHook'); /** Prepare and generate HTML for a page @@ -28,10 +29,13 @@ function generatePage(output, page) { })); } - return Promise(resultPage.getContent()) + // Call hook "page:before" + return callPageHook('page:before', output, resultPage) // Escape code blocks with raw tags - .then(parser.page.prepare) + .then(function(currentPage) { + return parser.page.prepare(currentPage.getContent()); + }) // Render templating syntax .then(function(content) { @@ -49,6 +53,11 @@ function generatePage(output, page) { // Return new page .then(function(content) { return resultPage.set('content', content); + }) + + // Call final hook + .then(function(currentPage) { + return callPageHook('page', output, currentPage); }); }); } |