summaryrefslogtreecommitdiffstats
path: root/lib/models
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-26 13:03:53 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-26 13:03:53 +0200
commit1057bb15d3b7250dc541a126754750ec6b8a79a2 (patch)
tree02fbc54452c038254cd2563c77755b9942d0c533 /lib/models
parentea5e8891a833b20a2b03cc1e150fbe0d1df3a506 (diff)
downloadgitbook-1057bb15d3b7250dc541a126754750ec6b8a79a2.zip
gitbook-1057bb15d3b7250dc541a126754750ec6b8a79a2.tar.gz
gitbook-1057bb15d3b7250dc541a126754750ec6b8a79a2.tar.bz2
Complete method getByPath of Summary
Diffstat (limited to 'lib/models')
-rw-r--r--lib/models/summary.js10
-rw-r--r--lib/models/summaryArticle.js36
-rw-r--r--lib/models/summaryPart.js10
3 files changed, 17 insertions, 39 deletions
diff --git a/lib/models/summary.js b/lib/models/summary.js
index 4ab2d68..d0dc8af 100644
--- a/lib/models/summary.js
+++ b/lib/models/summary.js
@@ -24,7 +24,9 @@ Summary.prototype.getParts = function() {
@return {Part|Article}
*/
Summary.prototype.getByLevel = function(level) {
- return SummaryArticle.getByLevel(this, level, 'getParts');
+ return SummaryArticle.findArticle(this, function(article) {
+ return (article.getLevel() === level);
+ }, 'getParts');
};
/**
@@ -34,9 +36,9 @@ Summary.prototype.getByLevel = function(level) {
@return {Part|Article}
*/
Summary.prototype.getByPath = function(filePath) {
- // todo
-
- return undefined;
+ return SummaryArticle.findArticle(this, function(article) {
+ return (article.getPath() === filePath);
+ }, 'getParts');
};
/**
diff --git a/lib/models/summaryArticle.js b/lib/models/summaryArticle.js
index 945a16c..d6cd045 100644
--- a/lib/models/summaryArticle.js
+++ b/lib/models/summaryArticle.js
@@ -39,16 +39,6 @@ SummaryArticle.prototype.getDepth = 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}
@@ -131,31 +121,27 @@ SummaryArticle.create = function(def, level) {
/**
- Return an article by its level
+ Find an article from a base one
@param {Article|Part} base
- @param {String} level
+ @param {Function(article)} iter
@param {String} method
@return {Article}
*/
-SummaryArticle.getByLevel = function(base, level, method) {
+SummaryArticle.findArticle = function(base, iter, 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;
- });
+ return articles.reduce(function(result, article) {
+ if (result) return result;
- if (!result) {
- return undefined;
- }
- if (levelParts.length === 0) {
- return result;
- }
+ if (iter(article)) {
+ return article;
+ }
- return SummaryArticle.getByLevel(result, levelParts.join('.'));
+ return SummaryArticle.findArticle(article, iter);
+ }, null);
};
+
module.exports = SummaryArticle;
diff --git a/lib/models/summaryPart.js b/lib/models/summaryPart.js
index 345cf83..c8c608d 100644
--- a/lib/models/summaryPart.js
+++ b/lib/models/summaryPart.js
@@ -25,16 +25,6 @@ SummaryPart.prototype.getArticles = function() {
};
/**
- Return an article by its level
-
- @param {String} level
- @return {Article}
-*/
-SummaryPart.prototype.getByLevel = function(level) {
- return SummaryArticle.getByLevel(this, level);
-};
-
-/**
Create a SummaryPart
@param {Object} def