From 54956de59f1a3a5796b4a3665d36c08cba91bf4d Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Sun, 8 May 2016 10:33:45 +0200 Subject: [PATCH 1/3] Start API for plugins to access the summary --- lib/api/encodeGlobal.js | 7 ++++-- lib/api/encodeSummary.js | 40 ++++++++++++++++++++++++++++++++ lib/json/encodeSummaryArticle.js | 1 + 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 lib/api/encodeSummary.js diff --git a/lib/api/encodeGlobal.js b/lib/api/encodeGlobal.js index 1e7df3635..8e3456a87 100644 --- a/lib/api/encodeGlobal.js +++ b/lib/api/encodeGlobal.js @@ -5,12 +5,14 @@ var fs = require('../utils/fs'); var Plugins = require('../plugins'); var deprecate = require('./deprecate'); -var encodeConfig = require('./encodeConfig'); -var encodeNavigation = require('./encodeNavigation'); var fileToURL = require('../output/helper/fileToURL'); var defaultBlocks = require('../constants/defaultBlocks'); var gitbook = require('../gitbook'); +var encodeConfig = require('./encodeConfig'); +var encodeSummary = require('./encodeSummary'); +var encodeNavigation = require('./encodeNavigation'); + /** Encode a global context into a JS object It's the context for page's hook, etc @@ -29,6 +31,7 @@ function encodeGlobal(output) { var result = { log: logger, config: encodeConfig(output, book.getConfig()), + summary: encodeSummary(output. book.getSummary()), /** Check if the book is a multilingual book diff --git a/lib/api/encodeSummary.js b/lib/api/encodeSummary.js new file mode 100644 index 000000000..2bb8d1147 --- /dev/null +++ b/lib/api/encodeSummary.js @@ -0,0 +1,40 @@ +var encodeSummaryArticle = require('../json/encodeSummaryArticle'); + +/** + Encode summary to provide an API to plugin + + @param {Output} output + @param {Config} config + @return {Object} +*/ +function encodeSummary(output, summary) { + var result = { + /** + Iterate over the summary + + @param {Function} iter + */ + walk: function (iter) { + summary.getArticle(function(article) { + var jsonArticle = encodeSummaryArticle(article, false); + + return iter(jsonArticle); + }); + }, + + /** + Get an article by its level + + @param {String} level + @return {Object} + */ + getArticleByLevel: function(level) { + var article = summary.getByLevel(level); + return (article? encodeSummaryArticle(article) : undefined); + } + }; + + return result; +} + +module.exports = encodeSummary; diff --git a/lib/json/encodeSummaryArticle.js b/lib/json/encodeSummaryArticle.js index 987e44a59..2fc514492 100644 --- a/lib/json/encodeSummaryArticle.js +++ b/lib/json/encodeSummaryArticle.js @@ -20,6 +20,7 @@ function encodeSummaryArticle(article, recursive) { anchor: article.getAnchor(), url: article.getUrl(), path: article.getPath(), + ref: article.getRef(), articles: articles }; } From c7864927ecdfce09e29488a97358b797dcfdcfa3 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Sun, 8 May 2016 11:08:27 +0200 Subject: [PATCH 2/3] Add method summary.getArticleByPath to summary api --- lib/api/encodeSummary.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/api/encodeSummary.js b/lib/api/encodeSummary.js index 2bb8d1147..f1a7d971f 100644 --- a/lib/api/encodeSummary.js +++ b/lib/api/encodeSummary.js @@ -31,6 +31,17 @@ function encodeSummary(output, summary) { getArticleByLevel: function(level) { var article = summary.getByLevel(level); return (article? encodeSummaryArticle(article) : undefined); + }, + + /** + Get an article by its path + + @param {String} level + @return {Object} + */ + getArticleByPath: function(level) { + var article = summary.getByPath(level); + return (article? encodeSummaryArticle(article) : undefined); } }; From bb910f984edd8080e5fe1d1b34a7dfec7ac9d785 Mon Sep 17 00:00:00 2001 From: Samy Pesse Date: Sun, 8 May 2016 22:26:46 +0200 Subject: [PATCH 3/3] Improve comment for API summary.walk --- lib/api/encodeSummary.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/encodeSummary.js b/lib/api/encodeSummary.js index f1a7d971f..0d66ded49 100644 --- a/lib/api/encodeSummary.js +++ b/lib/api/encodeSummary.js @@ -10,7 +10,7 @@ var encodeSummaryArticle = require('../json/encodeSummaryArticle'); function encodeSummary(output, summary) { var result = { /** - Iterate over the summary + Iterate over the summary, it stops when the "iter" returns false @param {Function} iter */