summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/api/index.js5
-rw-r--r--lib/models/summary.js31
-rw-r--r--lib/models/summaryArticle.js8
-rw-r--r--lib/output/callPageHook.js14
-rw-r--r--lib/output/generateBook.js6
-rw-r--r--lib/output/generatePage.js13
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);
});
});
}