diff options
Diffstat (limited to 'lib/models')
-rw-r--r-- | lib/models/summary.js | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/lib/models/summary.js b/lib/models/summary.js index ec7e05f..8a4afc7 100644 --- a/lib/models/summary.js +++ b/lib/models/summary.js @@ -56,7 +56,7 @@ Summary.prototype.getArticle = function(iter, partIter) { Return a part/article by its level @param {String} level - @return {Article} + @return {Article|Part} */ Summary.prototype.getByLevel = function(level) { function iterByLevel(article) { @@ -130,6 +130,27 @@ Summary.prototype.getPrevArticle = function(current) { }; /** + Return the parent article, or parent part of an article + + @param {String|Article} current + @return {Article|Part|Null} +*/ +Summary.prototype.getParent = function (level) { + // Coerce to level + level = is.string(level)? level : level.getLevel(); + + // Get parent level + var parentLevel = getParentLevel(level); + if (!parentLevel) { + return null; + } + + // Get parent of the position + var parentArticle = this.getByLevel(parentLevel); + return parentArticle || null; +}; + +/** Render summary as text @param {String} parseExt Extension of the parser to use @@ -188,4 +209,15 @@ Summary.createFromParts = function createFromParts(file, parts) { }); }; +/** + Returns parent level of a level + + @param {String} level + @return {String} +*/ +function getParentLevel(level) { + var parts = level.split('.'); + return parts.slice(0, -1).join('.'); +} + module.exports = Summary; |