summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSoreine <nicolas@gitbook.com>2016-05-09 19:07:51 +0200
committerSoreine <nicolas@gitbook.com>2016-05-11 13:11:32 +0200
commit0945807184907d4aac47d370d05b39d4029d07fa (patch)
tree486df7d82ac8f928f43c4df6150f6cb05baeb0d4
parentd85663b153adba5f237055444d18aae05eb4c03b (diff)
downloadgitbook-0945807184907d4aac47d370d05b39d4029d07fa.zip
gitbook-0945807184907d4aac47d370d05b39d4029d07fa.tar.gz
gitbook-0945807184907d4aac47d370d05b39d4029d07fa.tar.bz2
Greatly simplify moveArticle's implementation
-rw-r--r--lib/modifiers/summary/__tests__/moveArticle.js2
-rw-r--r--lib/modifiers/summary/moveArticle.js63
2 files changed, 4 insertions, 61 deletions
diff --git a/lib/modifiers/summary/__tests__/moveArticle.js b/lib/modifiers/summary/__tests__/moveArticle.js
index 9a101f6..aed0b94 100644
--- a/lib/modifiers/summary/__tests__/moveArticle.js
+++ b/lib/modifiers/summary/__tests__/moveArticle.js
@@ -42,7 +42,7 @@ describe('moveArticle', function() {
}
]);
- it('should move an article at in place', function() {
+ it('should move an article to the same place', function() {
var newSummary = moveArticle(summary, '2.1', '2.1');
expect(Immutable.is(summary, newSummary)).toBe(true);
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;