diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-23 11:22:20 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-23 11:22:20 +0200 |
commit | ce95f316b9ce1eac1e615db3540c4d0f30408d63 (patch) | |
tree | 2cb773317a937887c216d93afd6d92fcdca64475 /lib/models/summaryArticle.js | |
parent | a162af5a75453a6ecb818447540cbffdc774715f (diff) | |
download | gitbook-ce95f316b9ce1eac1e615db3540c4d0f30408d63.zip gitbook-ce95f316b9ce1eac1e615db3540c4d0f30408d63.tar.gz gitbook-ce95f316b9ce1eac1e615db3540c4d0f30408d63.tar.bz2 |
Add method to be article by level
Diffstat (limited to 'lib/models/summaryArticle.js')
-rw-r--r-- | lib/models/summaryArticle.js | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/lib/models/summaryArticle.js b/lib/models/summaryArticle.js index 3d642fc..4a448c8 100644 --- a/lib/models/summaryArticle.js +++ b/lib/models/summaryArticle.js @@ -30,6 +30,16 @@ SummaryArticle.prototype.getArticles = function() { }; /** + Return an article by its level + + @param {String} level + @return {Article} +*/ +SummaryArticle.prototype.getByLevel = function(level) { + return SummaryArticle.getByLevel(this, level); +}; + +/** Get path (without anchor) to the pointing file @return {String} @@ -81,15 +91,16 @@ SummaryArticle.prototype.isExternal = function() { @param {Object} def @return {SummaryArticle} */ -SummaryArticle.create = function(def) { - var articles = (def.articles || []).map(function(article) { +SummaryArticle.create = function(def, level) { + var articles = (def.articles || []).map(function(article, i) { if (article instanceof SummaryArticle) { return article; } - return SummaryArticle.create(article); + return SummaryArticle.create(article, [level, i].join('.')); }); return new SummaryArticle({ + level: level, title: def.title, ref: def.ref || def.path, articles: Immutable.List(articles) @@ -97,4 +108,32 @@ SummaryArticle.create = function(def) { }; +/** + Return an article by its level + + @param {Article|Part} base + @param {String} level + @param {String} method + @return {Article} +*/ +SummaryArticle.getByLevel = function(base, level, method) { + method = method || 'getArticles'; + var articles = base[method](); + var levelParts = level.split('.'); + var baseLevel = levelParts.shift(); + + var result = articles.find(function(a) { + return a.getLevel() === baseLevel; + }); + + if (!result) { + return undefined; + } + if (levelParts.length === 0) { + return result; + } + + return SummaryArticle.getByLevel(result, levelParts.join('.')); +}; + module.exports = SummaryArticle; |