mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 23:55:20 +00:00
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
var Immutable = require('immutable');
|
|
|
|
var File = require('./file');
|
|
var SummaryPart = require('./summaryPart');
|
|
var SummaryArticle = require('./summaryArticle');
|
|
|
|
var Summary = Immutable.Record({
|
|
file: File(),
|
|
parts: Immutable.List()
|
|
}, 'Summary');
|
|
|
|
Summary.prototype.getFile = function() {
|
|
return this.get('file');
|
|
};
|
|
|
|
Summary.prototype.getParts = function() {
|
|
return this.get('parts');
|
|
};
|
|
|
|
/**
|
|
Return an article using an iterator to find it.
|
|
if "partIter" is set, it can also return a Part.
|
|
|
|
@param {Function} iter
|
|
@param {Function} partIter
|
|
@return {Article|Part}
|
|
*/
|
|
Summary.prototype.getArticle = function(iter, partIter) {
|
|
var parts = this.getParts();
|
|
|
|
return parts.reduce(function(result, part) {
|
|
if (result) return result;
|
|
|
|
if (partIter && partIter(part)) return part;
|
|
return SummaryArticle.findArticle(part, iter);
|
|
}, null);
|
|
};
|
|
|
|
|
|
/**
|
|
Return a part/article by its level
|
|
|
|
@param {String} level
|
|
@return {Article}
|
|
*/
|
|
Summary.prototype.getByLevel = function(level) {
|
|
function iterByLevel(article) {
|
|
return (article.getLevel() === level);
|
|
}
|
|
|
|
return this.getArticle(iterByLevel, iterByLevel);
|
|
};
|
|
|
|
/**
|
|
Return an article by its path
|
|
|
|
@param {String} filePath
|
|
@return {Article}
|
|
*/
|
|
Summary.prototype.getByPath = function(filePath) {
|
|
return this.getArticle(function(article) {
|
|
return (article.getPath() === filePath);
|
|
});
|
|
};
|
|
|
|
/**
|
|
Create a new summary for a list of parts
|
|
|
|
@param {Lust|Array} parts
|
|
@return {Summary}
|
|
*/
|
|
Summary.createFromParts = function createFromParts(file, parts) {
|
|
parts = parts.map(function(part, i) {
|
|
if (part instanceof SummaryPart) {
|
|
return part;
|
|
}
|
|
|
|
return SummaryPart.create(part, i + 1);
|
|
});
|
|
|
|
return new Summary({
|
|
file: file,
|
|
parts: new Immutable.List(parts)
|
|
});
|
|
};
|
|
|
|
module.exports = Summary;
|