diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-04-28 11:15:51 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-04-28 11:15:51 +0200 |
commit | 4763f1342c1b63d2f43ae2f5060b93d4c09271fd (patch) | |
tree | 5ef83232fa187532efe01f59ce3d794476d56b60 | |
parent | 9413e53b001c3a7ee9d07a362a7bdd69df4d4c1e (diff) | |
download | gitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.zip gitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.tar.gz gitbook-4763f1342c1b63d2f43ae2f5060b93d4c09271fd.tar.bz2 |
Add base modifiers for summary as SummaryModifier
-rw-r--r-- | lib/browser.js | 10 | ||||
-rw-r--r-- | lib/index.js | 15 | ||||
-rw-r--r-- | lib/models/summary.js | 11 | ||||
-rw-r--r-- | lib/modifiers/index.js | 4 | ||||
-rw-r--r-- | lib/modifiers/summary/editPartTitle.js | 24 | ||||
-rw-r--r-- | lib/modifiers/summary/index.js | 7 | ||||
-rw-r--r-- | lib/modifiers/summary/indexLevels.js | 13 | ||||
-rw-r--r-- | lib/modifiers/summary/insertArticle.js | 17 | ||||
-rw-r--r-- | lib/modifiers/summary/unshiftArticle.js | 28 | ||||
-rw-r--r-- | lib/parse/parseSummary.js | 26 |
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); }); } |