Add base modifiers for summary as SummaryModifier

This commit is contained in:
Samy Pessé
2016-04-28 11:15:51 +02:00
parent 9413e53b00
commit 4763f1342c
10 changed files with 144 additions and 11 deletions
+8 -2
View File
@@ -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
};
+7 -8
View File
@@ -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);
+11
View File
@@ -65,6 +65,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
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
Summary: require('./summary')
};
+24
View File
@@ -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;
+7
View File
@@ -0,0 +1,7 @@
module.exports = {
insertArticle: require('./insertArticle'),
unshiftArticle: require('./unshiftArticle'),
editPartTitle: require('./editPartTitle')
};
+13
View File
@@ -0,0 +1,13 @@
/**
Index all levels in the summary
@param {Summary}
@return {Summary}
*/
function indexLevels(summary) {
}
module.exports = indexLevels;
+17
View File
@@ -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;
+28
View File
@@ -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;
+25 -1
View File
@@ -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);
});
}