diff options
Diffstat (limited to 'lib/modifiers/summary/insertArticle.js')
-rw-r--r-- | lib/modifiers/summary/insertArticle.js | 56 |
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; |