summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-04-28 11:15:51 +0200
committerSamy Pessé <samypesse@gmail.com>2016-04-28 11:15:51 +0200
commit4763f1342c1b63d2f43ae2f5060b93d4c09271fd (patch)
tree5ef83232fa187532efe01f59ce3d794476d56b60
parent9413e53b001c3a7ee9d07a362a7bdd69df4d4c1e (diff)
downloadgitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.zip
gitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.tar.gz
gitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.tar.bz2
Add base modifiers for summary as SummaryModifier
-rw-r--r--lib/browser.js10
-rw-r--r--lib/index.js15
-rw-r--r--lib/models/summary.js11
-rw-r--r--lib/modifiers/index.js4
-rw-r--r--lib/modifiers/summary/editPartTitle.js24
-rw-r--r--lib/modifiers/summary/index.js7
-rw-r--r--lib/modifiers/summary/indexLevels.js13
-rw-r--r--lib/modifiers/summary/insertArticle.js17
-rw-r--r--lib/modifiers/summary/unshiftArticle.js28
-rw-r--r--lib/parse/parseSummary.js26
10 files changed, 144 insertions, 11 deletions
diff --git a/lib/browser.js b/lib/browser.js
index 42f8d0a..c244530 100644
--- a/lib/browser.js
+++ b/lib/browser.js
@@ -1,9 +1,15 @@
var Book = require('./models/book');
var FS = require('./models/fs');
var Parse = require('./parse');
+var Modifiers = require('./modifiers');
module.exports = {
- Book: Book,
Parse: Parse,
- FS: FS
+
+ // Models
+ Book: Book,
+ FS: FS,
+
+ // Modifiers
+ SummaryModifier: Modifiers.Summary
};
diff --git a/lib/index.js b/lib/index.js
index a772efe..ffaea25 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,11 +1,10 @@
-var Book = require('./models/book');
-var FS = require('./models/fs');
-var Parse = require('./parse');
+var extend = require('extend');
+
+var common = require('./browser');
+var Output = require('./output');
var cli = require('./cli');
-module.exports = {
- Book: Book,
- Parse: Parse,
- FS: FS,
+module.exports = extend({
+ Output: Output,
commands: cli.commands
-};
+}, common);
diff --git a/lib/models/summary.js b/lib/models/summary.js
index 079c535..444c191 100644
--- a/lib/models/summary.js
+++ b/lib/models/summary.js
@@ -66,6 +66,17 @@ Summary.prototype.getByPath = function(filePath) {
};
/**
+ Return the first article
+
+ @return {Article}
+*/
+Summary.prototype.getFirstArticle = function() {
+ return this.getArticle(function(article) {
+ return true;
+ });
+};
+
+/**
Render summary as text
@return {Promise<String>}
diff --git a/lib/modifiers/index.js b/lib/modifiers/index.js
new file mode 100644
index 0000000..ed09e31
--- /dev/null
+++ b/lib/modifiers/index.js
@@ -0,0 +1,4 @@
+
+module.exports = {
+ Summary: require('./summary')
+};
diff --git a/lib/modifiers/summary/editPartTitle.js b/lib/modifiers/summary/editPartTitle.js
new file mode 100644
index 0000000..472399b
--- /dev/null
+++ b/lib/modifiers/summary/editPartTitle.js
@@ -0,0 +1,24 @@
+
+/**
+ 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
new file mode 100644
index 0000000..03f1098
--- /dev/null
+++ b/lib/modifiers/summary/index.js
@@ -0,0 +1,7 @@
+
+module.exports = {
+ insertArticle: require('./insertArticle'),
+ unshiftArticle: require('./unshiftArticle'),
+
+ editPartTitle: require('./editPartTitle')
+};
diff --git a/lib/modifiers/summary/indexLevels.js b/lib/modifiers/summary/indexLevels.js
new file mode 100644
index 0000000..d29b043
--- /dev/null
+++ b/lib/modifiers/summary/indexLevels.js
@@ -0,0 +1,13 @@
+
+/**
+ Index all levels in the summary
+
+ @param {Summary}
+ @return {Summary}
+*/
+function indexLevels(summary) {
+
+}
+
+
+module.exports = indexLevels;
diff --git a/lib/modifiers/summary/insertArticle.js b/lib/modifiers/summary/insertArticle.js
new file mode 100644
index 0000000..ec29978
--- /dev/null
+++ b/lib/modifiers/summary/insertArticle.js
@@ -0,0 +1,17 @@
+var SummaryArticle = require('../../models/summaryArticle');
+
+/**
+ Insert an article in a summary, and reindex levels correctly
+
+ @param {Summary} summary
+ @param {String} level: level to insert after
+ @param {Article} article
+ @return {Summary}
+*/
+function insertArticle(summary, level, article) {
+ article = SummaryArticle(article);
+
+
+}
+
+module.exports = insertArticle;
diff --git a/lib/modifiers/summary/unshiftArticle.js b/lib/modifiers/summary/unshiftArticle.js
new file mode 100644
index 0000000..6bb97c9
--- /dev/null
+++ b/lib/modifiers/summary/unshiftArticle.js
@@ -0,0 +1,28 @@
+var SummaryArticle = require('../../models/summaryArticle');
+var SummaryPart = require('../../models/summaryPart');
+
+var indexLevels = require('./indexLevels');
+
+/**
+ Insert an article at the
+
+ @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);
+
+ parts = parts.set(0, part);
+ summary = summary.set('parts', parts);
+
+ return indexLevels(summary);
+}
+
+module.exports = unshiftArticle;
diff --git a/lib/parse/parseSummary.js b/lib/parse/parseSummary.js
index fc34446..6ac8d04 100644
--- a/lib/parse/parseSummary.js
+++ b/lib/parse/parseSummary.js
@@ -1,14 +1,24 @@
+var Promise = require('../utils/promise');
+
var parseStructureFile = require('./parseStructureFile');
var Summary = require('../models/summary');
+var SummaryModifier = require('../modifiers').Summary;
/**
- Parse summary in a book
+ Parse summary in a book, the summary can only be parsed
+ if the readme as be detected before.
@param {Book} book
@return {Promise<Book>}
*/
function parseSummary(book) {
+ var readme = book.getReadme();
var logger = book.getLogger();
+ var readmeFile = readme.getFile();
+
+ if (!readmeFile.exists()) {
+ return Promise.reject(new Error('Summary parsing should be done after readme parsing'));
+ }
return parseStructureFile(book, 'summary')
.spread(function(file, result) {
@@ -19,6 +29,20 @@ function parseSummary(book) {
logger.debug.ln('summary file found at', file.getPath());
var summary = Summary.createFromParts(file, result.parts);
+
+
+
+ // Insert readme as first entry
+ var firstArticle = summary.getFirstArticle();
+ if (!firstArticle || firstArticle.getRef() !== readmeFile.getPath()) {
+ summary = SummaryModifier.unshiftArticle(summary, {
+ title: 'Introduction',
+ ref: readmeFile.getPath()
+ });
+ }
+
+
+ // Set new summary
return book.set('summary', summary);
});
}