mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-27 12:39:08 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cc9274c9af | |||
| bbdf7efc34 | |||
| 38a986995a | |||
| ee8d35df7a | |||
| be411cd5ff | |||
| 2104019171 | |||
| 4e564707df | |||
| da8611e0c3 | |||
| 5d11641a5f | |||
| 24d38e4fcf | |||
| efb65a8413 | |||
| 3fc90554f5 | |||
| 4ebe28faae | |||
| 693171cb05 |
@@ -1,3 +1,4 @@
|
||||
var path = require('path');
|
||||
var Promise = require('../utils/promise');
|
||||
var PathUtils = require('../utils/path');
|
||||
var fs = require('../utils/fs');
|
||||
@@ -67,6 +68,16 @@ function encodeGlobal(output) {
|
||||
return bookFS.readAsString(fileName);
|
||||
},
|
||||
|
||||
/**
|
||||
Resolve a file from the book root
|
||||
|
||||
@param {String} fileName
|
||||
@return {String}
|
||||
*/
|
||||
resolve: function(fileName) {
|
||||
return path.resolve(book.getContentRoot(), fileName);
|
||||
},
|
||||
|
||||
template: {
|
||||
/**
|
||||
Apply a templating block and returns its result
|
||||
|
||||
@@ -43,6 +43,10 @@ Parser.prototype.parseGlossary = function(content) {
|
||||
|
||||
Parser.prototype.preparePage = function(content) {
|
||||
var page = this.get('page');
|
||||
if (!page.prepare) {
|
||||
return Promise(content);
|
||||
}
|
||||
|
||||
return Promise(page.prepare(content));
|
||||
};
|
||||
|
||||
|
||||
+33
-1
@@ -56,7 +56,7 @@ Summary.prototype.getArticle = function(iter, partIter) {
|
||||
Return a part/article by its level
|
||||
|
||||
@param {String} level
|
||||
@return {Article}
|
||||
@return {Article|Part}
|
||||
*/
|
||||
Summary.prototype.getByLevel = function(level) {
|
||||
function iterByLevel(article) {
|
||||
@@ -129,6 +129,27 @@ Summary.prototype.getPrevArticle = function(current) {
|
||||
return prev;
|
||||
};
|
||||
|
||||
/**
|
||||
Return the parent article, or parent part of an article
|
||||
|
||||
@param {String|Article} current
|
||||
@return {Article|Part|Null}
|
||||
*/
|
||||
Summary.prototype.getParent = function (level) {
|
||||
// Coerce to level
|
||||
level = is.string(level)? level : level.getLevel();
|
||||
|
||||
// Get parent level
|
||||
var parentLevel = getParentLevel(level);
|
||||
if (!parentLevel) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Get parent of the position
|
||||
var parentArticle = this.getByLevel(parentLevel);
|
||||
return parentArticle || null;
|
||||
};
|
||||
|
||||
/**
|
||||
Render summary as text
|
||||
|
||||
@@ -188,4 +209,15 @@ Summary.createFromParts = function createFromParts(file, parts) {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
Returns parent level of a level
|
||||
|
||||
@param {String} level
|
||||
@return {String}
|
||||
*/
|
||||
function getParentLevel(level) {
|
||||
var parts = level.split('.');
|
||||
return parts.slice(0, -1).join('.');
|
||||
}
|
||||
|
||||
module.exports = Summary;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
var Immutable = require('immutable');
|
||||
var Summary = require('../../../models/summary');
|
||||
var File = require('../../../models/file');
|
||||
|
||||
describe('mergeAtLevel', function() {
|
||||
var mergeAtLevel = require('../mergeAtLevel');
|
||||
var summary = Summary.createFromParts(File(), [
|
||||
{
|
||||
articles: [
|
||||
{
|
||||
title: '1.1',
|
||||
path: '1.1'
|
||||
},
|
||||
{
|
||||
title: '1.2',
|
||||
path: '1.2'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Part I',
|
||||
articles: []
|
||||
}
|
||||
]);
|
||||
|
||||
it('should edit a part', function() {
|
||||
var beforeChildren = summary.getByLevel('1').getArticles();
|
||||
var newSummary = mergeAtLevel(summary, '1', {title: 'Part O'});
|
||||
var edited = newSummary.getByLevel('1');
|
||||
|
||||
expect(edited.getTitle()).toBe('Part O');
|
||||
// Same children
|
||||
expect(Immutable.is(beforeChildren, edited.getArticles())).toBe(true);
|
||||
});
|
||||
|
||||
it('should edit a part', function() {
|
||||
var beforePath = summary.getByLevel('1.2').getPath();
|
||||
var newSummary = mergeAtLevel(summary, '1.2', {title: 'Renamed article'});
|
||||
var edited = newSummary.getByLevel('1.2');
|
||||
|
||||
expect(edited.getTitle()).toBe('Renamed article');
|
||||
// Same children
|
||||
expect(Immutable.is(beforePath, edited.getPath())).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
var Immutable = require('immutable');
|
||||
var Summary = require('../../../models/summary');
|
||||
var File = require('../../../models/file');
|
||||
|
||||
describe('moveArticle', function() {
|
||||
var moveArticle = require('../moveArticle');
|
||||
var summary = Summary.createFromParts(File(), [
|
||||
{
|
||||
articles: [
|
||||
{
|
||||
title: '1.1',
|
||||
path: '1.1'
|
||||
},
|
||||
{
|
||||
title: '1.2',
|
||||
path: '1.2'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Part I',
|
||||
articles: [
|
||||
{
|
||||
title: '2.1',
|
||||
path: '2.1',
|
||||
articles: [
|
||||
{
|
||||
title: '2.1.1',
|
||||
path: '2.1.1'
|
||||
},
|
||||
{
|
||||
title: '2.1.2',
|
||||
path: '2.1.2'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '2.2',
|
||||
path: '2.2'
|
||||
}
|
||||
]
|
||||
}
|
||||
]);
|
||||
|
||||
it('should move an article at in place', function() {
|
||||
var newSummary = moveArticle(summary, '2.1', '2.1');
|
||||
|
||||
expect(Immutable.is(summary, newSummary)).toBe(true);
|
||||
});
|
||||
|
||||
it('should move an article to an previous level', function() {
|
||||
var newSummary = moveArticle(summary, '2.2', '2.1');
|
||||
var moved = newSummary.getByLevel('2.1');
|
||||
var other = newSummary.getByLevel('2.2');
|
||||
|
||||
expect(moved.getTitle()).toBe('2.2');
|
||||
expect(other.getTitle()).toBe('2.1');
|
||||
});
|
||||
|
||||
it('should move an article to a next level', function() {
|
||||
var newSummary = moveArticle(summary, '2.1', '2.2');
|
||||
var moved = newSummary.getByLevel('2.1');
|
||||
var other = newSummary.getByLevel('2.2');
|
||||
|
||||
expect(moved.getTitle()).toBe('2.2');
|
||||
expect(other.getTitle()).toBe('2.1');
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,4 @@
|
||||
var editArticle = require('./editArticle');
|
||||
var mergeAtLevel = require('./mergeAtLevel');
|
||||
|
||||
/**
|
||||
Edit title of an article
|
||||
@@ -9,7 +9,7 @@ var editArticle = require('./editArticle');
|
||||
@return {Summary}
|
||||
*/
|
||||
function editArticleTitle(summary, level, newTitle) {
|
||||
return editArticle(summary, level, {
|
||||
return mergeAtLevel(summary, level, {
|
||||
title: newTitle
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/**
|
||||
Edit title of a part in the summary
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
module.exports = {
|
||||
insertArticle: require('./insertArticle'),
|
||||
moveArticle: require('./moveArticle'),
|
||||
removeArticle: require('./removeArticle'),
|
||||
unshiftArticle: require('./unshiftArticle'),
|
||||
|
||||
editPartTitle: require('./editPartTitle'),
|
||||
|
||||
@@ -1,25 +1,14 @@
|
||||
var is = require('is');
|
||||
var SummaryArticle = require('../../models/summaryArticle');
|
||||
var editArticle = require('./editArticle');
|
||||
var mergeAtLevel = require('./mergeAtLevel');
|
||||
var indexArticleLevels = require('./indexArticleLevels');
|
||||
|
||||
|
||||
/**
|
||||
Get level of parent of an article
|
||||
|
||||
@param {String} level
|
||||
@return {String}
|
||||
*/
|
||||
function getParentLevel(level) {
|
||||
var parts = level.split('.');
|
||||
return parts.slice(0, -1).join('.');
|
||||
}
|
||||
|
||||
/**
|
||||
Insert an article in a summary at a specific position
|
||||
Returns a new Summary with the article at the given level, with
|
||||
subsequent article shifted.
|
||||
|
||||
@param {Summary} summary
|
||||
@param {String|Article} level: level to insert after
|
||||
@param {String|Article} level: level to insert at
|
||||
@param {Article} article
|
||||
@return {Summary}
|
||||
*/
|
||||
@@ -27,37 +16,34 @@ function insertArticle(summary, level, article) {
|
||||
article = SummaryArticle(article);
|
||||
level = is.string(level)? level : level.getLevel();
|
||||
|
||||
var parentLevel = getParentLevel(level);
|
||||
|
||||
if (!parentLevel) {
|
||||
// todo: insert new part
|
||||
return summary;
|
||||
}
|
||||
|
||||
// Get parent of the position
|
||||
var parentArticle = summary.getByLevel(parentLevel);
|
||||
if (!parentLevel) {
|
||||
var parent = summary.getParent(level);
|
||||
if (!parent) {
|
||||
return summary;
|
||||
}
|
||||
|
||||
// Find the index to insert at
|
||||
var articles = parentArticle.getArticles();
|
||||
var index = articles.findIndex(function(art) {
|
||||
return art.getLevel() === level;
|
||||
});
|
||||
if (!index) {
|
||||
return summary;
|
||||
}
|
||||
var articles = parent.getArticles();
|
||||
var index = getLeafIndex(level);
|
||||
|
||||
// Insert the article at the right index
|
||||
articles = articles.insert(index, article);
|
||||
|
||||
// Reindex the level from here
|
||||
parentArticle = parentArticle.set('articles', articles);
|
||||
parentArticle = indexArticleLevels(parentArticle);
|
||||
parent = parent.set('articles', articles);
|
||||
parent = indexArticleLevels(parent);
|
||||
|
||||
return editArticle(summary, parentLevel, parentArticle);
|
||||
return mergeAtLevel(summary, parent.getLevel(), parent);
|
||||
}
|
||||
|
||||
/**
|
||||
@param {String}
|
||||
@return {Number} The index of this level within its parent's children
|
||||
*/
|
||||
function getLeafIndex(level) {
|
||||
var arr = level.split('.').map(function (char) {
|
||||
return parseInt(char, 10);
|
||||
});
|
||||
return arr[arr.length - 1] - 1;
|
||||
}
|
||||
|
||||
module.exports = insertArticle;
|
||||
|
||||
@@ -11,16 +11,17 @@ function editArticleInList(articles, level, newArticle) {
|
||||
return articles.map(function(article) {
|
||||
var articleLevel = article.getLevel();
|
||||
|
||||
if (articleLevel == level) {
|
||||
if (articleLevel === level) {
|
||||
// it is the article to edit
|
||||
return article.merge(newArticle);
|
||||
}
|
||||
|
||||
if (level.indexOf(articleLevel) === 0) {
|
||||
} else if (level.indexOf(articleLevel) === 0) {
|
||||
// it is a parent
|
||||
var articles = editArticleInList(article.getArticles(), level, newArticle);
|
||||
return article.set('articles', articles);
|
||||
} else {
|
||||
// This is not the article you are looking for
|
||||
return article;
|
||||
}
|
||||
|
||||
return article;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -35,36 +36,40 @@ function editArticleInList(articles, level, newArticle) {
|
||||
*/
|
||||
function editArticleInPart(part, level, newArticle) {
|
||||
var articles = part.getArticles();
|
||||
articles = editArticleInList(articles);
|
||||
articles = editArticleInList(articles, level, newArticle);
|
||||
|
||||
return part.set('articles', articles);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Edit an article in a summary
|
||||
Edit an article, or a part, in a summary. Does a shallow merge.
|
||||
|
||||
@param {Summary} summary
|
||||
@param {String} level
|
||||
@param {Article} newArticle
|
||||
@param {Article|Part} newValue
|
||||
@return {Summary}
|
||||
*/
|
||||
function editArticle(summary, level, newArticle) {
|
||||
var parts = summary.getParts();
|
||||
|
||||
function mergeAtLevel(summary, level, newValue) {
|
||||
var levelParts = level.split('.');
|
||||
var partIndex = Number(levelParts[0]);
|
||||
var partIndex = Number(levelParts[0]) -1;
|
||||
|
||||
var parts = summary.getParts();
|
||||
var part = parts.get(partIndex);
|
||||
if (!part) {
|
||||
return summary;
|
||||
}
|
||||
|
||||
part = editArticleInPart(part, level, newArticle);
|
||||
parts = parts.set(partIndex, part);
|
||||
var isEditingPart = levelParts.length < 2;
|
||||
if (isEditingPart) {
|
||||
part = part.merge(newValue);
|
||||
} else {
|
||||
part = editArticleInPart(part, level, newValue);
|
||||
}
|
||||
|
||||
parts = parts.set(partIndex, part);
|
||||
return summary.set('parts', parts);
|
||||
}
|
||||
|
||||
|
||||
module.exports = editArticle;
|
||||
module.exports = mergeAtLevel;
|
||||
@@ -0,0 +1,82 @@
|
||||
var is = require('is');
|
||||
var removeArticle = require('./removeArticle');
|
||||
var insertArticle = require('./insertArticle');
|
||||
|
||||
/**
|
||||
Returns a new summary, with the given article removed from its
|
||||
origin level, and placed at the given target level.
|
||||
|
||||
@param {Summary} summary
|
||||
@param {String|SummaryArticle} origin: level to remove
|
||||
@param {String|SummaryArticle} target: the level where the article will be found
|
||||
@return {Summary}
|
||||
*/
|
||||
function moveArticle(summary, origin, target) {
|
||||
// Coerce to level
|
||||
var originLevel = is.string(origin)? origin : origin.getLevel();
|
||||
var targetLevel = is.string(target)? target : target.getLevel();
|
||||
|
||||
var article = summary.getByLevel(originLevel);
|
||||
|
||||
// Remove
|
||||
var removed = removeArticle(summary, origin);
|
||||
|
||||
// Adjust targetLevel if removing impacted it
|
||||
targetLevel = arrayToLevel(
|
||||
shiftLevel(levelToArray(originLevel),
|
||||
levelToArray(targetLevel)));
|
||||
// Re-insert
|
||||
return insertArticle(removed, target, article);
|
||||
}
|
||||
|
||||
/**
|
||||
@param {Array<Number>} removedLevel
|
||||
@param {Array<Number>} level The level to udpate
|
||||
@return {Array<Number>}
|
||||
*/
|
||||
function shiftLevel(removedLevel, level) {
|
||||
if (level.length === 0) {
|
||||
// `removedLevel` is under level, so no effect
|
||||
return level;
|
||||
} else if (removedLevel.length === 0) {
|
||||
// Either `level` is a child of `removedLevel`... or they are equal
|
||||
// This is undefined behavior.
|
||||
return level;
|
||||
}
|
||||
|
||||
var removedRoot = removedLevel[0];
|
||||
var root = level[0];
|
||||
var removedRest = removedLevel.slice(1);
|
||||
var rest = level.slice(1);
|
||||
|
||||
if (removedRoot < root) {
|
||||
// It will shift levels at this point. The rest is unchanged.
|
||||
return Array.prototype.concat(root - 1, rest);
|
||||
} else if (removedRoot === root) {
|
||||
// Look deeper
|
||||
return Array.prototype.concat(root, shiftLevel(removedRest, rest));
|
||||
} else {
|
||||
// No impact
|
||||
return level;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@param {String}
|
||||
@return {Array<Number>}
|
||||
*/
|
||||
function levelToArray(l) {
|
||||
return l.split('.').map(function (char) {
|
||||
return parseInt(char, 10);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@param {Array<Number>}
|
||||
@return {String}
|
||||
*/
|
||||
function arrayToLevel(a) {
|
||||
return a.join('.');
|
||||
}
|
||||
|
||||
module.exports = moveArticle;
|
||||
@@ -0,0 +1,37 @@
|
||||
var is = require('is');
|
||||
var mergeAtLevel = require('./mergeAtLevel');
|
||||
var indexArticleLevels = require('./indexArticleLevels');
|
||||
|
||||
/**
|
||||
Remove an article from a level.
|
||||
|
||||
@param {Summary} summary
|
||||
@param {String|SummaryArticle} level: level to remove
|
||||
@return {Summary}
|
||||
*/
|
||||
function removeArticle(summary, level) {
|
||||
// Coerce to level
|
||||
level = is.string(level)? level : level.getLevel();
|
||||
|
||||
var parent = summary.getParent(level);
|
||||
|
||||
var articles = parent.getArticles();
|
||||
// Find the index to remove
|
||||
var index = articles.findIndex(function(art) {
|
||||
return art.getLevel() === level;
|
||||
});
|
||||
if (index === -1) {
|
||||
return summary;
|
||||
}
|
||||
|
||||
// Remove from children
|
||||
articles = articles.remove(index);
|
||||
parent = parent.set('articles', articles);
|
||||
|
||||
// Reindex the level from here
|
||||
parent = indexArticleLevels(parent);
|
||||
|
||||
return mergeAtLevel(summary, parent.getLevel(), parent);
|
||||
}
|
||||
|
||||
module.exports = removeArticle;
|
||||
@@ -4,7 +4,7 @@ var SummaryPart = require('../../models/summaryPart');
|
||||
var indexLevels = require('./indexLevels');
|
||||
|
||||
/**
|
||||
Insert an article at the
|
||||
Insert an article at the beginning of summary
|
||||
|
||||
@param {Summary} summary
|
||||
@param {Article} article
|
||||
|
||||
@@ -12,6 +12,15 @@ describe('WebsiteGenerator', function() {
|
||||
});
|
||||
});
|
||||
|
||||
pit('should generate an index.html for AsciiDoc', function() {
|
||||
return generateMock(WebsiteGenerator, {
|
||||
'README.adoc': 'Hello World'
|
||||
})
|
||||
.then(function(folder) {
|
||||
expect(folder).toHaveFile('index.html');
|
||||
});
|
||||
});
|
||||
|
||||
pit('should generate an HTML file for each articles', function() {
|
||||
return generateMock(WebsiteGenerator, {
|
||||
'README.md': 'Hello World',
|
||||
|
||||
@@ -78,14 +78,16 @@ function copyAssets(output, plugin) {
|
||||
function copyResources(output, plugin) {
|
||||
var logger = output.getLogger();
|
||||
|
||||
var options = output.getOptions();
|
||||
var prefix = options.get('prefix');
|
||||
var options = output.getOptions();
|
||||
var outputRoot = options.get('root');
|
||||
|
||||
var pluginRoot = plugin.getPath();
|
||||
var resources = plugin.getResources(prefix);
|
||||
var state = output.getState();
|
||||
var resources = state.getResources();
|
||||
|
||||
var assetsFolder = resources.get('assets');
|
||||
var pluginRoot = plugin.getPath();
|
||||
var pluginResources = resources.get(plugin.getName());
|
||||
|
||||
var assetsFolder = pluginResources.get('assets');
|
||||
var assetOutputFolder = path.join(outputRoot, 'gitbook', plugin.getNpmID());
|
||||
|
||||
if (!assetsFolder) {
|
||||
|
||||
@@ -2,6 +2,7 @@ var Promise = require('../../utils/promise');
|
||||
|
||||
var copyPluginAssets = require('./copyPluginAssets');
|
||||
var prepareI18n = require('./prepareI18n');
|
||||
var prepareResources = require('./prepareResources');
|
||||
|
||||
/**
|
||||
Initialize the generator
|
||||
@@ -12,6 +13,7 @@ var prepareI18n = require('./prepareI18n');
|
||||
function onInit(output) {
|
||||
return Promise(output)
|
||||
.then(prepareI18n)
|
||||
.then(prepareResources)
|
||||
.then(copyPluginAssets);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,11 +18,15 @@ var fileToOutput = require('../helper/fileToOutput');
|
||||
@param {Page} page
|
||||
*/
|
||||
function onPage(output, page) {
|
||||
var options = output.getOptions();
|
||||
var file = page.getFile();
|
||||
var prefix = options.get('prefix');
|
||||
var book = output.getBook();
|
||||
var plugins = output.getPlugins();
|
||||
var options = output.getOptions();
|
||||
var prefix = options.get('prefix');
|
||||
|
||||
var file = page.getFile();
|
||||
|
||||
var book = output.getBook();
|
||||
var plugins = output.getPlugins();
|
||||
var state = output.getState();
|
||||
var resources = state.getResources();
|
||||
|
||||
var engine = createTemplateEngine(output, page.getPath());
|
||||
|
||||
@@ -38,7 +42,7 @@ function onPage(output, page) {
|
||||
// Generate the context
|
||||
var context = JSONUtils.encodeBookWithPage(output.getBook(), resultPage);
|
||||
context.plugins = {
|
||||
resources: Plugins.listResources(plugins, prefix).toJS()
|
||||
resources: Plugins.listResources(plugins, resources).toJS()
|
||||
};
|
||||
|
||||
context.template = {
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
var is = require('is');
|
||||
var Immutable = require('immutable');
|
||||
var Promise = require('../../utils/promise');
|
||||
|
||||
var Api = require('../../api');
|
||||
|
||||
/**
|
||||
Prepare plugins resources, add all output corresponding type resources
|
||||
|
||||
@param {Output}
|
||||
@return {Promise<Output>}
|
||||
*/
|
||||
function prepareResources(output) {
|
||||
var plugins = output.getPlugins();
|
||||
var options = output.getOptions();
|
||||
var type = options.get('prefix');
|
||||
var state = output.getState();
|
||||
var context = Api.encodeGlobal(output);
|
||||
|
||||
var result = Immutable.Map();
|
||||
|
||||
return Promise.forEach(plugins, function(plugin) {
|
||||
var pluginResources = plugin.getResources(type);
|
||||
|
||||
return Promise()
|
||||
.then(function() {
|
||||
// Apply resources if is a function
|
||||
if (is.fn(pluginResources)) {
|
||||
return Promise()
|
||||
.then(pluginResources.bind(context));
|
||||
}
|
||||
else {
|
||||
return pluginResources;
|
||||
}
|
||||
})
|
||||
.then(function(resources) {
|
||||
result = result.set(plugin.getName(), Immutable.Map(resources));
|
||||
});
|
||||
})
|
||||
.then(function() {
|
||||
// Set output resources
|
||||
state = state.merge({
|
||||
resources: result
|
||||
});
|
||||
|
||||
output = output.merge({
|
||||
state: state
|
||||
});
|
||||
|
||||
return output;
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = prepareResources;
|
||||
@@ -2,11 +2,18 @@ var I18n = require('i18n-t');
|
||||
var Immutable = require('immutable');
|
||||
|
||||
var GeneratorState = Immutable.Record({
|
||||
i18n: I18n()
|
||||
i18n: I18n(),
|
||||
|
||||
// List of plugins' resources
|
||||
resources: Immutable.Map()
|
||||
});
|
||||
|
||||
GeneratorState.prototype.getI18n = function() {
|
||||
return this.get('i18n');
|
||||
};
|
||||
|
||||
GeneratorState.prototype.getResources = function() {
|
||||
return this.get('resources');
|
||||
};
|
||||
|
||||
module.exports = GeneratorState;
|
||||
|
||||
@@ -27,9 +27,6 @@ function parseIgnore(book) {
|
||||
|
||||
// Skip book outputs
|
||||
'_book',
|
||||
'*.pdf',
|
||||
'*.epub',
|
||||
'*.mobi',
|
||||
|
||||
// Ignore files in the templates folder
|
||||
'_layouts'
|
||||
|
||||
@@ -11,13 +11,13 @@ var PLUGIN_RESOURCES = require('../constants/pluginResources');
|
||||
@param {String} type
|
||||
@return {Map<String:List<{url, path}>}
|
||||
*/
|
||||
function listResources(plugins, type) {
|
||||
function listResources(plugins, resources) {
|
||||
return plugins.reduce(function(result, plugin) {
|
||||
var npmId = plugin.getNpmID();
|
||||
var resources = plugin.getResources(type);
|
||||
var npmId = plugin.getNpmID();
|
||||
var pluginResources = resources.get(plugin.getName());
|
||||
|
||||
PLUGIN_RESOURCES.forEach(function(resourceType) {
|
||||
var assets = resources.get(resourceType);
|
||||
var assets = pluginResources.get(resourceType);
|
||||
if (!assets) return;
|
||||
|
||||
var list = result.get(resourceType) || Immutable.List();
|
||||
|
||||
@@ -77,7 +77,8 @@ function toAbsolute(_href, dir, outdir) {
|
||||
@return {String}
|
||||
*/
|
||||
function relative(dir, file) {
|
||||
return normalize(path.relative(dir, file));
|
||||
var isDirectory = file.slice(-1) === '/';
|
||||
return normalize(path.relative(dir, file)) + (isDirectory? '/': '');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gitbook",
|
||||
"version": "3.0.0-pre.11",
|
||||
"version": "3.0.0-pre.12",
|
||||
"homepage": "https://www.gitbook.com",
|
||||
"description": "Library and cmd utility to generate GitBooks",
|
||||
"main": "lib/index.js",
|
||||
|
||||
Reference in New Issue
Block a user