diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-11 13:57:21 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-11 13:57:21 +0200 |
commit | 7bd49606e3aceb4078258c6693f53bc129eb5b93 (patch) | |
tree | b61d65f716c402c847973186c6f1dd7b78311827 /lib/modifiers/summary/moveArticle.js | |
parent | d7c86353503106b2672b7948661c1c0aa9e727bb (diff) | |
parent | 19e9ff81d2d118bb45d8245da3f1ba4cad95416b (diff) | |
download | gitbook-7bd49606e3aceb4078258c6693f53bc129eb5b93.zip gitbook-7bd49606e3aceb4078258c6693f53bc129eb5b93.tar.gz gitbook-7bd49606e3aceb4078258c6693f53bc129eb5b93.tar.bz2 |
Merge pull request #1291 from GitbookIO/summary-modifiers
Summary modifiers
Diffstat (limited to 'lib/modifiers/summary/moveArticle.js')
-rw-r--r-- | lib/modifiers/summary/moveArticle.js | 63 |
1 files changed, 3 insertions, 60 deletions
diff --git a/lib/modifiers/summary/moveArticle.js b/lib/modifiers/summary/moveArticle.js index 06d82ca..5cb1868 100644 --- a/lib/modifiers/summary/moveArticle.js +++ b/lib/modifiers/summary/moveArticle.js @@ -15,68 +15,11 @@ function moveArticle(summary, origin, target) { // Coerce to level var originLevel = is.string(origin)? origin : origin.getLevel(); var targetLevel = is.string(target)? target : target.getLevel(); - var article = summary.getByLevel(originLevel); - // Remove - var removed = removeArticle(summary, origin); - - // Adjust targetLevel if removing impacted it - targetLevel = arrayToLevel( - shiftLevel(levelToArray(originLevel), - levelToArray(targetLevel))); - // Re-insert - return insertArticle(removed, target, article); -} - -/** - @param {Array<Number>} removedLevel - @param {Array<Number>} level The level to udpate - @return {Array<Number>} - */ -function shiftLevel(removedLevel, level) { - if (level.length === 0) { - // `removedLevel` is under level, so no effect - return level; - } else if (removedLevel.length === 0) { - // Either `level` is a child of `removedLevel`... or they are equal - // This is undefined behavior. - return level; - } - - var removedRoot = removedLevel[0]; - var root = level[0]; - var removedRest = removedLevel.slice(1); - var rest = level.slice(1); - - if (removedRoot < root) { - // It will shift levels at this point. The rest is unchanged. - return Array.prototype.concat(root - 1, rest); - } else if (removedRoot === root) { - // Look deeper - return Array.prototype.concat(root, shiftLevel(removedRest, rest)); - } else { - // No impact - return level; - } -} - -/** - @param {String} - @return {Array<Number>} - */ -function levelToArray(l) { - return l.split('.').map(function (char) { - return parseInt(char, 10); - }); -} - -/** - @param {Array<Number>} - @return {String} - */ -function arrayToLevel(a) { - return a.join('.'); + // Remove first + var removed = removeArticle(summary, originLevel); + return insertArticle(removed, article, targetLevel); } module.exports = moveArticle; |