summaryrefslogtreecommitdiffstats
path: root/lib/models/summaryArticle.js
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-23 11:22:20 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-23 11:22:20 +0200
commitce95f316b9ce1eac1e615db3540c4d0f30408d63 (patch)
tree2cb773317a937887c216d93afd6d92fcdca64475 /lib/models/summaryArticle.js
parenta162af5a75453a6ecb818447540cbffdc774715f (diff)
downloadgitbook-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.js45
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;