summaryrefslogtreecommitdiffstats
path: root/lib/modifiers
diff options
context:
space:
mode:
Diffstat (limited to 'lib/modifiers')
-rw-r--r--lib/modifiers/config/__tests__/addPlugin.js32
-rw-r--r--lib/modifiers/config/__tests__/removePlugin.js33
-rw-r--r--lib/modifiers/config/__tests__/togglePlugin.js28
-rw-r--r--lib/modifiers/config/addPlugin.js25
-rw-r--r--lib/modifiers/config/editPlugin.js13
-rw-r--r--lib/modifiers/config/getPluginConfig.js20
-rw-r--r--lib/modifiers/config/hasPlugin.js15
-rw-r--r--lib/modifiers/config/index.js10
-rw-r--r--lib/modifiers/config/isDefaultPlugin.js14
-rw-r--r--lib/modifiers/config/removePlugin.js25
-rw-r--r--lib/modifiers/config/togglePlugin.js31
-rw-r--r--lib/modifiers/index.js5
-rw-r--r--lib/modifiers/summary/__tests__/editArticle.js0
-rw-r--r--lib/modifiers/summary/__tests__/editPartTitle.js44
-rw-r--r--lib/modifiers/summary/__tests__/insertArticle.js78
-rw-r--r--lib/modifiers/summary/__tests__/insertPart.js60
-rw-r--r--lib/modifiers/summary/__tests__/mergeAtLevel.js45
-rw-r--r--lib/modifiers/summary/__tests__/moveArticle.js68
-rw-r--r--lib/modifiers/summary/__tests__/moveArticleAfter.js82
-rw-r--r--lib/modifiers/summary/__tests__/removeArticle.js53
-rw-r--r--lib/modifiers/summary/editArticleRef.js17
-rw-r--r--lib/modifiers/summary/editArticleTitle.js17
-rw-r--r--lib/modifiers/summary/editPartTitle.js23
-rw-r--r--lib/modifiers/summary/index.js13
-rw-r--r--lib/modifiers/summary/indexArticleLevels.js23
-rw-r--r--lib/modifiers/summary/indexLevels.js17
-rw-r--r--lib/modifiers/summary/indexPartLevels.js24
-rw-r--r--lib/modifiers/summary/insertArticle.js49
-rw-r--r--lib/modifiers/summary/insertPart.js19
-rw-r--r--lib/modifiers/summary/mergeAtLevel.js75
-rw-r--r--lib/modifiers/summary/moveArticle.js25
-rw-r--r--lib/modifiers/summary/moveArticleAfter.js60
-rw-r--r--lib/modifiers/summary/removeArticle.js37
-rw-r--r--lib/modifiers/summary/removePart.js15
-rw-r--r--lib/modifiers/summary/unshiftArticle.js29
35 files changed, 0 insertions, 1124 deletions
diff --git a/lib/modifiers/config/__tests__/addPlugin.js b/lib/modifiers/config/__tests__/addPlugin.js
deleted file mode 100644
index 61082c9..0000000
--- a/lib/modifiers/config/__tests__/addPlugin.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var addPlugin = require('../addPlugin');
-var Config = require('../../../models/config');
-
-describe('addPlugin', function() {
- var config = Config.createWithValues({
- plugins: ['hello', 'world', '-disabled']
- });
-
- it('should have correct state of dependencies', function() {
- var disabledDep = config.getPluginDependency('disabled');
-
- expect(disabledDep).toBeDefined();
- expect(disabledDep.getVersion()).toEqual('*');
- expect(disabledDep.isEnabled()).toBeFalsy();
- });
-
- it('should add the plugin to the list', function() {
- var newConfig = addPlugin(config, 'test');
-
- var testDep = newConfig.getPluginDependency('test');
- expect(testDep).toBeDefined();
- expect(testDep.getVersion()).toEqual('*');
- expect(testDep.isEnabled()).toBeTruthy();
-
- var disabledDep = newConfig.getPluginDependency('disabled');
- expect(disabledDep).toBeDefined();
- expect(disabledDep.getVersion()).toEqual('*');
- expect(disabledDep.isEnabled()).toBeFalsy();
- });
-});
-
-
diff --git a/lib/modifiers/config/__tests__/removePlugin.js b/lib/modifiers/config/__tests__/removePlugin.js
deleted file mode 100644
index 253cc39..0000000
--- a/lib/modifiers/config/__tests__/removePlugin.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var removePlugin = require('../removePlugin');
-var Config = require('../../../models/config');
-
-describe('removePlugin', function() {
- var config = Config.createWithValues({
- plugins: ['hello', 'world', '-disabled']
- });
-
- it('should remove the plugin from the list', function() {
- var newConfig = removePlugin(config, 'hello');
-
- var testDep = newConfig.getPluginDependency('hello');
- expect(testDep).toNotBeDefined();
- });
-
- it('should remove the disabled plugin from the list', function() {
- var newConfig = removePlugin(config, 'disabled');
-
- var testDep = newConfig.getPluginDependency('disabled');
- expect(testDep).toNotBeDefined();
- });
-
- it('should disable default plugin', function() {
- var newConfig = removePlugin(config, 'search');
-
- var disabledDep = newConfig.getPluginDependency('search');
- expect(disabledDep).toBeDefined();
- expect(disabledDep.getVersion()).toEqual('*');
- expect(disabledDep.isEnabled()).toBeFalsy();
- });
-});
-
-
diff --git a/lib/modifiers/config/__tests__/togglePlugin.js b/lib/modifiers/config/__tests__/togglePlugin.js
deleted file mode 100644
index 4127853..0000000
--- a/lib/modifiers/config/__tests__/togglePlugin.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var togglePlugin = require('../togglePlugin');
-var Config = require('../../../models/config');
-
-describe('togglePlugin', function() {
- var config = Config.createWithValues({
- plugins: ['hello', 'world', '-disabled']
- });
-
- it('should enable plugin', function() {
- var newConfig = togglePlugin(config, 'disabled');
-
- var testDep = newConfig.getPluginDependency('disabled');
- expect(testDep).toBeDefined();
- expect(testDep.getVersion()).toEqual('*');
- expect(testDep.isEnabled()).toBeTruthy();
- });
-
- it('should disable plugin', function() {
- var newConfig = togglePlugin(config, 'world');
-
- var testDep = newConfig.getPluginDependency('world');
- expect(testDep).toBeDefined();
- expect(testDep.getVersion()).toEqual('*');
- expect(testDep.isEnabled()).toBeFalsy();
- });
-});
-
-
diff --git a/lib/modifiers/config/addPlugin.js b/lib/modifiers/config/addPlugin.js
deleted file mode 100644
index b8d4ea1..0000000
--- a/lib/modifiers/config/addPlugin.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var PluginDependency = require('../../models/pluginDependency');
-var togglePlugin = require('./togglePlugin');
-var isDefaultPlugin = require('./isDefaultPlugin');
-
-/**
- * Add a plugin to a book's configuration
- * @param {Config} config
- * @param {String} pluginName
- * @param {String} version (optional)
- * @return {Config}
- */
-function addPlugin(config, pluginName, version) {
- // For default plugin, we only ensure it is enabled
- if (isDefaultPlugin(pluginName, version)) {
- return togglePlugin(config, pluginName, true);
- }
-
- var deps = config.getPluginDependencies();
- var dep = PluginDependency.create(pluginName, version);
-
- deps = deps.push(dep);
- return config.setPluginDependencies(deps);
-}
-
-module.exports = addPlugin;
diff --git a/lib/modifiers/config/editPlugin.js b/lib/modifiers/config/editPlugin.js
deleted file mode 100644
index a792acd..0000000
--- a/lib/modifiers/config/editPlugin.js
+++ /dev/null
@@ -1,13 +0,0 @@
-
-/**
- * Edit configuration of a plugin
- * @param {Config} config
- * @param {String} plugin
- * @param {Object} pluginConfig
- * @return {Config}
- */
-function editPlugin(config, pluginName, pluginConfig) {
- return config.setValue('pluginsConfig.'+pluginName, pluginConfig);
-}
-
-module.exports = editPlugin;
diff --git a/lib/modifiers/config/getPluginConfig.js b/lib/modifiers/config/getPluginConfig.js
deleted file mode 100644
index ae76de8..0000000
--- a/lib/modifiers/config/getPluginConfig.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Return the configuration for a plugin
- * @param {Config} config
- * @param {String} pluginName
- * @return {Object}
- */
-function getPluginConfig(config, pluginName) {
- var pluginsConfig = config.getValues().get('pluginsConfig');
- if (pluginsConfig === undefined) {
- return {};
- }
- var pluginConf = pluginsConfig.get(pluginName);
- if (pluginConf === undefined) {
- return {};
- } else {
- return pluginConf.toJS();
- }
-}
-
-module.exports = getPluginConfig;
diff --git a/lib/modifiers/config/hasPlugin.js b/lib/modifiers/config/hasPlugin.js
deleted file mode 100644
index 9aab4f2..0000000
--- a/lib/modifiers/config/hasPlugin.js
+++ /dev/null
@@ -1,15 +0,0 @@
-
-/**
- * Test if a plugin is listed
- * @param { {List<PluginDependency}} deps
- * @param {String} plugin
- * @param {String} version
- * @return {Boolean}
- */
-function hasPlugin(deps, pluginName, version) {
- return !!deps.find(function(dep) {
- return dep.getName() === pluginName && (!version || dep.getVersion() === version);
- });
-}
-
-module.exports = hasPlugin;
diff --git a/lib/modifiers/config/index.js b/lib/modifiers/config/index.js
deleted file mode 100644
index b3de0b0..0000000
--- a/lib/modifiers/config/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-
-module.exports = {
- addPlugin: require('./addPlugin'),
- removePlugin: require('./removePlugin'),
- togglePlugin: require('./togglePlugin'),
- editPlugin: require('./editPlugin'),
- hasPlugin: require('./hasPlugin'),
- getPluginConfig: require('./getPluginConfig'),
- isDefaultPlugin: require('./isDefaultPlugin')
-};
diff --git a/lib/modifiers/config/isDefaultPlugin.js b/lib/modifiers/config/isDefaultPlugin.js
deleted file mode 100644
index 63a141d..0000000
--- a/lib/modifiers/config/isDefaultPlugin.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var DEFAULT_PLUGINS = require('../../constants/defaultPlugins');
-var hasPlugin = require('./hasPlugin');
-
-/**
- * Test if a plugin is a default one
- * @param {String} plugin
- * @param {String} version
- * @return {Boolean}
- */
-function isDefaultPlugin(pluginName, version) {
- return hasPlugin(DEFAULT_PLUGINS, pluginName, version);
-}
-
-module.exports = isDefaultPlugin;
diff --git a/lib/modifiers/config/removePlugin.js b/lib/modifiers/config/removePlugin.js
deleted file mode 100644
index ec06d1e..0000000
--- a/lib/modifiers/config/removePlugin.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var togglePlugin = require('./togglePlugin');
-var isDefaultPlugin = require('./isDefaultPlugin');
-
-/**
- * Remove a plugin from a book's configuration
- * @param {Config} config
- * @param {String} plugin
- * @return {Config}
- */
-function removePlugin(config, pluginName) {
- var deps = config.getPluginDependencies();
-
- // For default plugin, we have to disable it instead of removing from the list
- if (isDefaultPlugin(pluginName)) {
- return togglePlugin(config, pluginName, false);
- }
-
- // Remove the dependency from the list
- deps = deps.filterNot(function(dep) {
- return dep.getName() === pluginName;
- });
- return config.setPluginDependencies(deps);
-}
-
-module.exports = removePlugin;
diff --git a/lib/modifiers/config/togglePlugin.js b/lib/modifiers/config/togglePlugin.js
deleted file mode 100644
index a49e3b9..0000000
--- a/lib/modifiers/config/togglePlugin.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var PluginDependency = require('../../models/pluginDependency');
-var hasPlugin = require('./hasPlugin');
-var isDefaultPlugin = require('./isDefaultPlugin');
-
-/**
- * Enable/disable a plugin dependency
- * @param {Config} config
- * @param {String} pluginName
- * @param {Boolean} state (optional)
- * @return {Config}
- */
-function togglePlugin(config, pluginName, state) {
- var deps = config.getPluginDependencies();
-
- // For default plugin, we should ensure it's listed first
- if (isDefaultPlugin(pluginName) && !hasPlugin(deps, pluginName)) {
- deps = deps.push(PluginDependency.create(pluginName));
- }
-
- deps = deps.map(function(dep) {
- if (dep.getName() === pluginName) {
- return dep.toggle(state);
- }
-
- return dep;
- });
-
- return config.setPluginDependencies(deps);
-}
-
-module.exports = togglePlugin;
diff --git a/lib/modifiers/index.js b/lib/modifiers/index.js
deleted file mode 100644
index ad24604..0000000
--- a/lib/modifiers/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-
-module.exports = {
- Summary: require('./summary'),
- Config: require('./config')
-};
diff --git a/lib/modifiers/summary/__tests__/editArticle.js b/lib/modifiers/summary/__tests__/editArticle.js
deleted file mode 100644
index e69de29..0000000
--- a/lib/modifiers/summary/__tests__/editArticle.js
+++ /dev/null
diff --git a/lib/modifiers/summary/__tests__/editPartTitle.js b/lib/modifiers/summary/__tests__/editPartTitle.js
deleted file mode 100644
index d1b916b..0000000
--- a/lib/modifiers/summary/__tests__/editPartTitle.js
+++ /dev/null
@@ -1,44 +0,0 @@
-var Summary = require('../../../models/summary');
-var File = require('../../../models/file');
-
-describe('editPartTitle', function() {
- var editPartTitle = require('../editPartTitle');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: 'My First Article',
- path: 'README.md'
- },
- {
- title: 'My Second Article',
- path: 'article.md'
- }
- ]
- },
- {
- title: 'Test'
- }
- ]);
-
- it('should correctly set title of first part', function() {
- var newSummary = editPartTitle(summary, 0, 'Hello World');
- var part = newSummary.getPart(0);
-
- expect(part.getTitle()).toBe('Hello World');
- });
-
- it('should correctly set title of second part', function() {
- var newSummary = editPartTitle(summary, 1, 'Hello');
- var part = newSummary.getPart(1);
-
- expect(part.getTitle()).toBe('Hello');
- });
-
- it('should not fail if part doesn\'t exist', function() {
- var newSummary = editPartTitle(summary, 3, 'Hello');
- expect(newSummary.getParts().size).toBe(2);
- });
-});
-
-
diff --git a/lib/modifiers/summary/__tests__/insertArticle.js b/lib/modifiers/summary/__tests__/insertArticle.js
deleted file mode 100644
index 1ee1c8a..0000000
--- a/lib/modifiers/summary/__tests__/insertArticle.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var Summary = require('../../../models/summary');
-var SummaryArticle = require('../../../models/summaryArticle');
-var File = require('../../../models/file');
-
-describe('insertArticle', function() {
- var insertArticle = require('../insertArticle');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- },
- {
- title: '1.2',
- path: '1.2'
- }
- ]
- },
- {
- title: 'Part I',
- articles: [
- {
- title: '2.1',
- path: '2.1',
- articles: [
- {
- title: '2.1.1',
- path: '2.1.1'
- },
- {
- title: '2.1.2',
- path: '2.1.2'
- }
- ]
- },
- {
- title: '2.2',
- path: '2.2'
- }
- ]
- }
- ]);
-
- it('should insert an article at a given level', function() {
- var article = SummaryArticle.create({
- title: 'Inserted'
- }, 'fake.level');
-
- var newSummary = insertArticle(summary, article, '2.1.1');
-
- var inserted = newSummary.getByLevel('2.1.1');
- var nextOne = newSummary.getByLevel('2.1.2');
-
- expect(inserted.getTitle()).toBe('Inserted');
- expect(inserted.getLevel()).toBe('2.1.1');
-
- expect(nextOne.getTitle()).toBe('2.1.1');
- expect(nextOne.getLevel()).toBe('2.1.2');
- });
-
- it('should insert an article in last position', function() {
- var article = SummaryArticle.create({
- title: 'Inserted'
- }, 'fake.level');
-
- var newSummary = insertArticle(summary, article, '2.2');
-
- var inserted = newSummary.getByLevel('2.2');
- var previousOne = newSummary.getByLevel('2.1');
-
- expect(inserted.getTitle()).toBe('Inserted');
- expect(inserted.getLevel()).toBe('2.2');
-
- expect(previousOne.getTitle()).toBe('2.1'); // Unchanged
- expect(previousOne.getLevel()).toBe('2.1');
- });
-});
diff --git a/lib/modifiers/summary/__tests__/insertPart.js b/lib/modifiers/summary/__tests__/insertPart.js
deleted file mode 100644
index 11c2cbc..0000000
--- a/lib/modifiers/summary/__tests__/insertPart.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var Summary = require('../../../models/summary');
-var SummaryPart = require('../../../models/summaryPart');
-
-var File = require('../../../models/file');
-
-describe('insertPart', function() {
- var insertPart = require('../insertPart');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- }
- ]
- },
- {
- title: 'Part I',
- articles: [
- {
- title: '2.1',
- path: '2.1',
- articles: []
- },
- {
- title: '2.2',
- path: '2.2'
- }
- ]
- }
- ]);
-
- it('should insert an part at a given level', function() {
- var part = SummaryPart.create({
- title: 'Inserted'
- }, 'meaningless.level');
-
- var newSummary = insertPart(summary, part, 1);
-
- var inserted = newSummary.getPart(1);
- expect(inserted.getTitle()).toBe('Inserted');
- expect(newSummary.getParts().count()).toBe(3);
-
- var otherArticle = newSummary.getByLevel('3.1');
- expect(otherArticle.getTitle()).toBe('2.1');
- expect(otherArticle.getLevel()).toBe('3.1');
- });
-
- it('should insert an part in last position', function() {
- var part = SummaryPart.create({
- title: 'Inserted'
- }, 'meaningless.level');
-
- var newSummary = insertPart(summary, part, 2);
-
- var inserted = newSummary.getPart(2);
- expect(inserted.getTitle()).toBe('Inserted');
- expect(newSummary.getParts().count()).toBe(3);
- });
-});
diff --git a/lib/modifiers/summary/__tests__/mergeAtLevel.js b/lib/modifiers/summary/__tests__/mergeAtLevel.js
deleted file mode 100644
index e2635ec..0000000
--- a/lib/modifiers/summary/__tests__/mergeAtLevel.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var Immutable = require('immutable');
-var Summary = require('../../../models/summary');
-var File = require('../../../models/file');
-
-describe('mergeAtLevel', function() {
- var mergeAtLevel = require('../mergeAtLevel');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- },
- {
- title: '1.2',
- path: '1.2'
- }
- ]
- },
- {
- title: 'Part I',
- articles: []
- }
- ]);
-
- it('should edit a part', function() {
- var beforeChildren = summary.getByLevel('1').getArticles();
- var newSummary = mergeAtLevel(summary, '1', {title: 'Part O'});
- var edited = newSummary.getByLevel('1');
-
- expect(edited.getTitle()).toBe('Part O');
- // Same children
- expect(Immutable.is(beforeChildren, edited.getArticles())).toBe(true);
- });
-
- it('should edit a part', function() {
- var beforePath = summary.getByLevel('1.2').getPath();
- var newSummary = mergeAtLevel(summary, '1.2', {title: 'Renamed article'});
- var edited = newSummary.getByLevel('1.2');
-
- expect(edited.getTitle()).toBe('Renamed article');
- // Same children
- expect(Immutable.is(beforePath, edited.getPath())).toBe(true);
- });
-});
diff --git a/lib/modifiers/summary/__tests__/moveArticle.js b/lib/modifiers/summary/__tests__/moveArticle.js
deleted file mode 100644
index aed0b94..0000000
--- a/lib/modifiers/summary/__tests__/moveArticle.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var Immutable = require('immutable');
-var Summary = require('../../../models/summary');
-var File = require('../../../models/file');
-
-describe('moveArticle', function() {
- var moveArticle = require('../moveArticle');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- },
- {
- title: '1.2',
- path: '1.2'
- }
- ]
- },
- {
- title: 'Part I',
- articles: [
- {
- title: '2.1',
- path: '2.1',
- articles: [
- {
- title: '2.1.1',
- path: '2.1.1'
- },
- {
- title: '2.1.2',
- path: '2.1.2'
- }
- ]
- },
- {
- title: '2.2',
- path: '2.2'
- }
- ]
- }
- ]);
-
- 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);
- });
-
- it('should move an article to an previous level', function() {
- var newSummary = moveArticle(summary, '2.2', '2.1');
- var moved = newSummary.getByLevel('2.1');
- var other = newSummary.getByLevel('2.2');
-
- expect(moved.getTitle()).toBe('2.2');
- expect(other.getTitle()).toBe('2.1');
- });
-
- it('should move an article to a next level', function() {
- var newSummary = moveArticle(summary, '2.1', '2.2');
- var moved = newSummary.getByLevel('2.1');
- var other = newSummary.getByLevel('2.2');
-
- expect(moved.getTitle()).toBe('2.2');
- expect(other.getTitle()).toBe('2.1');
- });
-});
diff --git a/lib/modifiers/summary/__tests__/moveArticleAfter.js b/lib/modifiers/summary/__tests__/moveArticleAfter.js
deleted file mode 100644
index c380575..0000000
--- a/lib/modifiers/summary/__tests__/moveArticleAfter.js
+++ /dev/null
@@ -1,82 +0,0 @@
-var Immutable = require('immutable');
-var Summary = require('../../../models/summary');
-var File = require('../../../models/file');
-
-describe('moveArticleAfter', function() {
- var moveArticleAfter = require('../moveArticleAfter');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- },
- {
- title: '1.2',
- path: '1.2'
- }
- ]
- },
- {
- title: 'Part I',
- articles: [
- {
- title: '2.1',
- path: '2.1',
- articles: [
- {
- title: '2.1.1',
- path: '2.1.1'
- },
- {
- title: '2.1.2',
- path: '2.1.2'
- }
- ]
- },
- {
- title: '2.2',
- path: '2.2'
- }
- ]
- }
- ]);
-
- it('moving right after itself should be invariant', function() {
- var newSummary = moveArticleAfter(summary, '2.1', '2.1');
-
- expect(Immutable.is(summary, newSummary)).toBe(true);
- });
-
- it('moving after previous one should be invariant too', function() {
- var newSummary = moveArticleAfter(summary, '2.1', '2.0');
-
- expect(Immutable.is(summary, newSummary)).toBe(true);
- });
-
- it('should move an article after a previous level', function() {
- var newSummary = moveArticleAfter(summary, '2.2', '2.0');
- var moved = newSummary.getByLevel('2.1');
-
- expect(moved.getTitle()).toBe('2.2');
- expect(newSummary.getByLevel('2.2').getTitle()).toBe('2.1');
- });
-
- it('should move an article after a previous and less deep level', function() {
- var newSummary = moveArticleAfter(summary, '2.1.1', '2.0');
- var moved = newSummary.getByLevel('2.1');
-
- expect(moved.getTitle()).toBe('2.1.1');
- expect(newSummary.getByLevel('2.2.1').getTitle()).toBe('2.1.2');
- expect(newSummary.getByLevel('2.2').getTitle()).toBe('2.1');
- });
-
- it('should move an article after a next level', function() {
- var newSummary = moveArticleAfter(summary, '2.1', '2.2');
- var moved = newSummary.getByLevel('2.2');
-
- expect(moved.getTitle()).toBe('2.1');
- expect(newSummary.getByLevel('2.1').getTitle()).toBe('2.2');
- });
-
-});
diff --git a/lib/modifiers/summary/__tests__/removeArticle.js b/lib/modifiers/summary/__tests__/removeArticle.js
deleted file mode 100644
index b45fb49..0000000
--- a/lib/modifiers/summary/__tests__/removeArticle.js
+++ /dev/null
@@ -1,53 +0,0 @@
-var Summary = require('../../../models/summary');
-var File = require('../../../models/file');
-
-describe('removeArticle', function() {
- var removeArticle = require('../removeArticle');
- var summary = Summary.createFromParts(File(), [
- {
- articles: [
- {
- title: '1.1',
- path: '1.1'
- },
- {
- title: '1.2',
- path: '1.2'
- }
- ]
- },
- {
- title: 'Part I',
- articles: [
- {
- title: '2.1',
- path: '2.1',
- articles: [
- {
- title: '2.1.1',
- path: '2.1.1'
- },
- {
- title: '2.1.2',
- path: '2.1.2'
- }
- ]
- },
- {
- title: '2.2',
- path: '2.2'
- }
- ]
- }
- ]);
-
- it('should remove an article at a given level', function() {
- var newSummary = removeArticle(summary, '2.1.1');
-
- var removed = newSummary.getByLevel('2.1.1');
- var nextOne = newSummary.getByLevel('2.1.2');
-
- expect(removed.getTitle()).toBe('2.1.2');
- expect(nextOne).toBe(null);
- });
-});
diff --git a/lib/modifiers/summary/editArticleRef.js b/lib/modifiers/summary/editArticleRef.js
deleted file mode 100644
index 7106960..0000000
--- a/lib/modifiers/summary/editArticleRef.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var mergeAtLevel = require('./mergeAtLevel');
-
-/**
- Edit the ref of an article
-
- @param {Summary} summary
- @param {String} level
- @param {String} newRef
- @return {Summary}
-*/
-function editArticleRef(summary, level, newRef) {
- return mergeAtLevel(summary, level, {
- ref: newRef
- });
-}
-
-module.exports = editArticleRef;
diff --git a/lib/modifiers/summary/editArticleTitle.js b/lib/modifiers/summary/editArticleTitle.js
deleted file mode 100644
index 4edee83..0000000
--- a/lib/modifiers/summary/editArticleTitle.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var mergeAtLevel = require('./mergeAtLevel');
-
-/**
- Edit title of an article
-
- @param {Summary} summary
- @param {String} level
- @param {String} newTitle
- @return {Summary}
-*/
-function editArticleTitle(summary, level, newTitle) {
- return mergeAtLevel(summary, level, {
- title: newTitle
- });
-}
-
-module.exports = editArticleTitle;
diff --git a/lib/modifiers/summary/editPartTitle.js b/lib/modifiers/summary/editPartTitle.js
deleted file mode 100644
index b79ac1e..0000000
--- a/lib/modifiers/summary/editPartTitle.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- Edit title of a part in the summary
-
- @param {Summary} summary
- @param {Number} index
- @param {String} newTitle
- @return {Summary}
-*/
-function editPartTitle(summary, index, newTitle) {
- var parts = summary.getParts();
-
- var part = parts.get(index);
- if (!part) {
- return summary;
- }
-
- part = part.set('title', newTitle);
- parts = parts.set(index, part);
-
- return summary.set('parts', parts);
-}
-
-module.exports = editPartTitle;
diff --git a/lib/modifiers/summary/index.js b/lib/modifiers/summary/index.js
deleted file mode 100644
index f91fdb6..0000000
--- a/lib/modifiers/summary/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- insertArticle: require('./insertArticle'),
- moveArticle: require('./moveArticle'),
- moveArticleAfter: require('./moveArticleAfter'),
- removeArticle: require('./removeArticle'),
- unshiftArticle: require('./unshiftArticle'),
- editArticleTitle: require('./editArticleTitle'),
- editArticleRef: require('./editArticleRef'),
-
- insertPart: require('./insertPart'),
- removePart: require('./removePart'),
- editPartTitle: require('./editPartTitle')
-};
diff --git a/lib/modifiers/summary/indexArticleLevels.js b/lib/modifiers/summary/indexArticleLevels.js
deleted file mode 100644
index f311f74..0000000
--- a/lib/modifiers/summary/indexArticleLevels.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/**
- Index levels in an article tree
-
- @param {Article}
- @param {String} baseLevel
- @return {Article}
-*/
-function indexArticleLevels(article, baseLevel) {
- baseLevel = baseLevel || article.getLevel();
- var articles = article.getArticles();
-
- articles = articles.map(function(inner, i) {
- return indexArticleLevels(inner, baseLevel + '.' + (i + 1));
- });
-
- return article.merge({
- level: baseLevel,
- articles: articles
- });
-}
-
-module.exports = indexArticleLevels;
diff --git a/lib/modifiers/summary/indexLevels.js b/lib/modifiers/summary/indexLevels.js
deleted file mode 100644
index 604e9ff..0000000
--- a/lib/modifiers/summary/indexLevels.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var indexPartLevels = require('./indexPartLevels');
-
-/**
- Index all levels in the summary
-
- @param {Summary}
- @return {Summary}
-*/
-function indexLevels(summary) {
- var parts = summary.getParts();
- parts = parts.map(indexPartLevels);
-
- return summary.set('parts', parts);
-}
-
-
-module.exports = indexLevels;
diff --git a/lib/modifiers/summary/indexPartLevels.js b/lib/modifiers/summary/indexPartLevels.js
deleted file mode 100644
index d19c70a..0000000
--- a/lib/modifiers/summary/indexPartLevels.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var indexArticleLevels = require('./indexArticleLevels');
-
-/**
- Index levels in a part
-
- @param {Part}
- @param {Number} index
- @return {Part}
-*/
-function indexPartLevels(part, index) {
- var baseLevel = String(index + 1);
- var articles = part.getArticles();
-
- articles = articles.map(function(inner, i) {
- return indexArticleLevels(inner, baseLevel + '.' + (i + 1));
- });
-
- return part.merge({
- level: baseLevel,
- articles: articles
- });
-}
-
-module.exports = indexPartLevels;
diff --git a/lib/modifiers/summary/insertArticle.js b/lib/modifiers/summary/insertArticle.js
deleted file mode 100644
index 3a084b3..0000000
--- a/lib/modifiers/summary/insertArticle.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var is = require('is');
-var SummaryArticle = require('../../models/summaryArticle');
-var mergeAtLevel = require('./mergeAtLevel');
-var indexArticleLevels = require('./indexArticleLevels');
-
-/**
- Returns a new Summary with the article at the given level, with
- subsequent article shifted.
-
- @param {Summary} summary
- @param {Article} article
- @param {String|Article} level: level to insert at
- @return {Summary}
-*/
-function insertArticle(summary, article, level) {
- article = SummaryArticle(article);
- level = is.string(level)? level : level.getLevel();
-
- var parent = summary.getParent(level);
- if (!parent) {
- return summary;
- }
-
- // Find the index to insert at
- 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
- parent = parent.set('articles', articles);
- parent = indexArticleLevels(parent);
-
- 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;
diff --git a/lib/modifiers/summary/insertPart.js b/lib/modifiers/summary/insertPart.js
deleted file mode 100644
index 199cba7..0000000
--- a/lib/modifiers/summary/insertPart.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var SummaryPart = require('../../models/summaryPart');
-var indexLevels = require('./indexLevels');
-
-/**
- Returns a new Summary with a part inserted at given index
-
- @param {Summary} summary
- @param {Part} part
- @param {Number} index
- @return {Summary}
-*/
-function insertPart(summary, part, index) {
- part = SummaryPart(part);
-
- var parts = summary.getParts().insert(index, part);
- return indexLevels(summary.set('parts', parts));
-}
-
-module.exports = insertPart;
diff --git a/lib/modifiers/summary/mergeAtLevel.js b/lib/modifiers/summary/mergeAtLevel.js
deleted file mode 100644
index 9a95ffc..0000000
--- a/lib/modifiers/summary/mergeAtLevel.js
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/**
- Edit a list of articles
-
- @param {List<Article>} articles
- @param {String} level
- @param {Article} newArticle
- @return {List<Article>}
-*/
-function editArticleInList(articles, level, newArticle) {
- return articles.map(function(article) {
- var articleLevel = article.getLevel();
-
- if (articleLevel === level) {
- // it is the article to edit
- return article.merge(newArticle);
- } else if (level.indexOf(articleLevel) === 0) {
- // it is a parent
- var articles = editArticleInList(article.getArticles(), level, newArticle);
- return article.set('articles', articles);
- } else {
- // This is not the article you are looking for
- return article;
- }
- });
-}
-
-
-/**
- Edit an article in a part
-
- @param {Part} part
- @param {String} level
- @param {Article} newArticle
- @return {Part}
-*/
-function editArticleInPart(part, level, newArticle) {
- var articles = part.getArticles();
- articles = editArticleInList(articles, level, newArticle);
-
- return part.set('articles', articles);
-}
-
-
-/**
- Edit an article, or a part, in a summary. Does a shallow merge.
-
- @param {Summary} summary
- @param {String} level
- @param {Article|Part} newValue
- @return {Summary}
-*/
-function mergeAtLevel(summary, level, newValue) {
- var levelParts = level.split('.');
- var partIndex = Number(levelParts[0]) -1;
-
- var parts = summary.getParts();
- var part = parts.get(partIndex);
- if (!part) {
- return summary;
- }
-
- var isEditingPart = levelParts.length < 2;
- if (isEditingPart) {
- part = part.merge(newValue);
- } else {
- part = editArticleInPart(part, level, newValue);
- }
-
- parts = parts.set(partIndex, part);
- return summary.set('parts', parts);
-}
-
-
-module.exports = mergeAtLevel;
diff --git a/lib/modifiers/summary/moveArticle.js b/lib/modifiers/summary/moveArticle.js
deleted file mode 100644
index 5cb1868..0000000
--- a/lib/modifiers/summary/moveArticle.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var is = require('is');
-var removeArticle = require('./removeArticle');
-var insertArticle = require('./insertArticle');
-
-/**
- Returns a new summary, with the given article removed from its
- origin level, and placed at the given target level.
-
- @param {Summary} summary
- @param {String|SummaryArticle} origin: level to remove
- @param {String|SummaryArticle} target: the level where the article will be found
- @return {Summary}
-*/
-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 first
- var removed = removeArticle(summary, originLevel);
- return insertArticle(removed, article, targetLevel);
-}
-
-module.exports = moveArticle;
diff --git a/lib/modifiers/summary/moveArticleAfter.js b/lib/modifiers/summary/moveArticleAfter.js
deleted file mode 100644
index e268f73..0000000
--- a/lib/modifiers/summary/moveArticleAfter.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var is = require('is');
-var removeArticle = require('./removeArticle');
-var insertArticle = require('./insertArticle');
-
-/**
- Returns a new summary, with the an article moved after another
- article. Unlike `moveArticle`, does not ensure that the article
- will be found at the target's level plus one.
-
- @param {Summary} summary
- @param {String|SummaryArticle} origin
- @param {String|SummaryArticle} afterTarget
- @return {Summary}
-*/
-function moveArticleAfter(summary, origin, afterTarget) {
- // Coerce to level
- var originLevel = is.string(origin)? origin : origin.getLevel();
- var afterTargetLevel = is.string(afterTarget)? afterTarget : afterTarget.getLevel();
- var article = summary.getByLevel(originLevel);
-
- var targetLevel = increment(afterTargetLevel);
-
- if (targetLevel < origin) {
- // Remove first
- var removed = removeArticle(summary, originLevel);
- // Insert then
- return insertArticle(removed, article, targetLevel);
- } else {
- // Insert right after first
- var inserted = insertArticle(summary, article, targetLevel);
- // Remove old one
- return removeArticle(inserted, originLevel);
- }
-}
-
-/**
- @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('.');
-}
-
-function increment(level) {
- level = levelToArray(level);
- level[level.length - 1]++;
- return arrayToLevel(level);
-}
-
-module.exports = moveArticleAfter;
diff --git a/lib/modifiers/summary/removeArticle.js b/lib/modifiers/summary/removeArticle.js
deleted file mode 100644
index 8a30d0a..0000000
--- a/lib/modifiers/summary/removeArticle.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var is = require('is');
-var mergeAtLevel = require('./mergeAtLevel');
-var indexArticleLevels = require('./indexArticleLevels');
-
-/**
- Remove an article from a level.
-
- @param {Summary} summary
- @param {String|SummaryArticle} level: level to remove
- @return {Summary}
-*/
-function removeArticle(summary, level) {
- // Coerce to level
- level = is.string(level)? level : level.getLevel();
-
- var parent = summary.getParent(level);
-
- var articles = parent.getArticles();
- // Find the index to remove
- var index = articles.findIndex(function(art) {
- return art.getLevel() === level;
- });
- if (index === -1) {
- return summary;
- }
-
- // Remove from children
- articles = articles.remove(index);
- parent = parent.set('articles', articles);
-
- // Reindex the level from here
- parent = indexArticleLevels(parent);
-
- return mergeAtLevel(summary, parent.getLevel(), parent);
-}
-
-module.exports = removeArticle;
diff --git a/lib/modifiers/summary/removePart.js b/lib/modifiers/summary/removePart.js
deleted file mode 100644
index 2f8affc..0000000
--- a/lib/modifiers/summary/removePart.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var indexLevels = require('./indexLevels');
-
-/**
- Remove a part at given index
-
- @param {Summary} summary
- @param {Number|} index
- @return {Summary}
-*/
-function removePart(summary, index) {
- var parts = summary.getParts().remove(index);
- return indexLevels(summary.set('parts', parts));
-}
-
-module.exports = removePart;
diff --git a/lib/modifiers/summary/unshiftArticle.js b/lib/modifiers/summary/unshiftArticle.js
deleted file mode 100644
index d1ebc05..0000000
--- a/lib/modifiers/summary/unshiftArticle.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var SummaryArticle = require('../../models/summaryArticle');
-var SummaryPart = require('../../models/summaryPart');
-
-var indexLevels = require('./indexLevels');
-
-/**
- Insert an article at the beginning of summary
-
- @param {Summary} summary
- @param {Article} article
- @return {Summary}
-*/
-function unshiftArticle(summary, article) {
- article = SummaryArticle(article);
-
- var parts = summary.getParts();
- var part = parts.get(0) || SummaryPart();
-
- var articles = part.getArticles();
- articles = articles.unshift(article);
- part = part.set('articles', articles);
-
- parts = parts.set(0, part);
- summary = summary.set('parts', parts);
-
- return indexLevels(summary);
-}
-
-module.exports = unshiftArticle;