mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-10-03 20:20:35 +00:00
Add base modifiers for summary as SummaryModifier
This commit is contained in:
+8
-2
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
module.exports = {
|
||||
Summary: require('./summary')
|
||||
};
|
||||
@@ -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;
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
module.exports = {
|
||||
insertArticle: require('./insertArticle'),
|
||||
unshiftArticle: require('./unshiftArticle'),
|
||||
|
||||
editPartTitle: require('./editPartTitle')
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
/**
|
||||
Index all levels in the summary
|
||||
|
||||
@param {Summary}
|
||||
@return {Summary}
|
||||
*/
|
||||
function indexLevels(summary) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
module.exports = indexLevels;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user