summaryrefslogtreecommitdiffstats
path: root/lib/models
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models')
-rw-r--r--lib/models/summary.js34
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;