summaryrefslogtreecommitdiffstats
path: root/lib/modifiers/summary/insertArticle.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/modifiers/summary/insertArticle.js')
-rw-r--r--lib/modifiers/summary/insertArticle.js50
1 files changed, 48 insertions, 2 deletions
diff --git a/lib/modifiers/summary/insertArticle.js b/lib/modifiers/summary/insertArticle.js
index ec29978..ae920c2 100644
--- a/lib/modifiers/summary/insertArticle.js
+++ b/lib/modifiers/summary/insertArticle.js
@@ -1,16 +1,62 @@
+var is = require('is');
var SummaryArticle = require('../../models/summaryArticle');
+var editArticle = require('./editArticle');
+var indexArticleLevels = require('./indexArticleLevels');
+
+
+/**
+ Get level of parent of an article
+
+ @param {String} level
+ @return {String}
+*/
+function getParentLevel(level) {
+ var parts = level.split('.');
+ return parts.slice(0, -1).join('.');
+}
/**
- Insert an article in a summary, and reindex levels correctly
+ Insert an article in a summary at a specific position
@param {Summary} summary
- @param {String} level: level to insert after
+ @param {String|Article} level: level to insert after
@param {Article} article
@return {Summary}
*/
function insertArticle(summary, level, article) {
article = SummaryArticle(article);
+ level = is.string(level)? level : level.getLevel();
+
+ var parentLevel = getParentLevel(level);
+
+ if (!parentLevel) {
+ // todo: insert new part
+ return summary;
+ }
+
+ // Get parent of the position
+ var parentArticle = summary.getByLevel(parentLevel);
+ if (!parentLevel) {
+ return summary;
+ }
+
+ // Find the index to insert at
+ var articles = parentArticle.getArticles();
+ var index = articles.findIndex(function(art) {
+ return art.getLevel() === level;
+ });
+ if (!index) {
+ return summary;
+ }
+
+ // Insert the article at the right index
+ articles = articles.insert(index, article);
+
+ // Reindex the level from here
+ parentArticle = parentArticle.set('articles', articles);
+ parentArticle = indexArticleLevels(parentArticle);
+ return editArticle(summary, parentLevel, parentArticle);
}