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.js56
1 files changed, 21 insertions, 35 deletions
diff --git a/lib/modifiers/summary/insertArticle.js b/lib/modifiers/summary/insertArticle.js
index ae920c2..849f39e 100644
--- a/lib/modifiers/summary/insertArticle.js
+++ b/lib/modifiers/summary/insertArticle.js
@@ -1,25 +1,14 @@
var is = require('is');
var SummaryArticle = require('../../models/summaryArticle');
-var editArticle = require('./editArticle');
+var mergeAtLevel = require('./mergeAtLevel');
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 at a specific position
+ Returns a new Summary with the article at the given level, with
+ subsequent article shifted.
@param {Summary} summary
- @param {String|Article} level: level to insert after
+ @param {String|Article} level: level to insert at
@param {Article} article
@return {Summary}
*/
@@ -27,37 +16,34 @@ 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) {
+ var parent = summary.getParent(level);
+ if (!parent) {
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;
- }
+ var articles = parent.getArticles();
+ var index = getLeafIndex(level);
// 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);
+ parent = parent.set('articles', articles);
+ parent = indexArticleLevels(parent);
- return editArticle(summary, parentLevel, parentArticle);
+ return mergeAtLevel(summary, parent.getLevel(), parent);
+}
+/**
+ @param {String}
+ @return {Number} The index of this level within its parent's children
+ */
+function getLeafIndex(level) {
+ var arr = level.split('.').map(function (char) {
+ return parseInt(char, 10);
+ });
+ return arr[arr.length - 1] - 1;
}
module.exports = insertArticle;