diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-30 20:15:08 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-30 20:15:08 +0200 |
commit | 36b49c66c6b75515bc84dd678fd52121a313e8d2 (patch) | |
tree | bc7e0f703d4557869943ec7f9495cac7a5027d4f /lib/modifiers/summary/insertArticle.js | |
parent | 87db7cf1d412fa6fbd18e9a7e4f4755f2c0c5547 (diff) | |
parent | 80b8e340dadc54377ff40500f86b1de631395806 (diff) | |
download | gitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.zip gitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.tar.gz gitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.tar.bz2 |
Merge branch 'fixes'
Diffstat (limited to 'lib/modifiers/summary/insertArticle.js')
-rw-r--r-- | lib/modifiers/summary/insertArticle.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/modifiers/summary/insertArticle.js b/lib/modifiers/summary/insertArticle.js new file mode 100644 index 0000000..ae920c2 --- /dev/null +++ b/lib/modifiers/summary/insertArticle.js @@ -0,0 +1,63 @@ +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 at a specific position + + @param {Summary} summary + @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); + +} + +module.exports = insertArticle; |