Add plugins.resources for template context

This commit is contained in:
Samy Pessé
2016-04-27 13:47:12 +02:00
parent 7574b01863
commit 7298dec353
5 changed files with 60 additions and 5 deletions
+4 -2
View File
@@ -1,4 +1,6 @@
module.exports = [
var Immutable = require('immutable');
module.exports = Immutable.List([
'js',
'css'
];
]);
+2 -1
View File
@@ -42,7 +42,8 @@ function generateBook(generator, book, options) {
new Output({
book: book,
options: options,
state: state
state: state,
generator: generator.name
})
)
.then(preparePlugins)
+7 -1
View File
@@ -2,6 +2,7 @@ var path = require('path');
var omit = require('omit-keys');
var Templating = require('../../templating');
var Plugins = require('../../plugins');
var JSONUtils = require('../../json');
var LocationUtils = require('../../utils/location');
var Modifiers = require('../modifiers');
@@ -22,6 +23,7 @@ function onPage(output, page) {
var prefix = options.get('prefix');
var book = output.getBook();
var config = book.getConfig();
var plugins = output.getPlugins();
var engine = createTemplateEngine(output, page.getPath());
@@ -36,7 +38,11 @@ function onPage(output, page) {
.then(function(resultPage) {
// Generate the context
var context = JSONUtils.encodeBookWithPage(output.getBook(), resultPage);
context.config = config.getValues().toJS();
context.plugins = {
resources: Plugins.listResources(plugins, prefix).toJS()
};
context.template = {
getJSContext: function() {
@@ -47,7 +53,7 @@ function onPage(output, page) {
gitbook: context.gitbook,
basePath: basePath,
book: {
language: null //context.book.language
language: null // context.book.language
}
};
}
+2 -1
View File
@@ -2,6 +2,7 @@
module.exports = {
loadForBook: require('./loadForBook'),
validateConfig: require('./validateConfig'),
installPlugins: require('./installPlugins')
installPlugins: require('./installPlugins'),
listResources: require('./listResources')
};
+45
View File
@@ -0,0 +1,45 @@
var Immutable = require('immutable');
var path = require('path');
var LocationUtils = require('../utils/location');
var PLUGIN_RESOURCES = require('../constants/pluginResources');
/**
Encode plugins as JSON
@param {OrderedMap<String:Plugin>}
@param {String} type
@return {Map<String:List<{url, path}>}
*/
function listResources(plugins, type) {
return plugins.reduce(function(result, plugin) {
var npmId = plugin.getNpmID();
var resources = plugin.getResources(type);
PLUGIN_RESOURCES.forEach(function(resourceType) {
var assets = resources.get(resourceType);
if (!assets) return;
var list = result.get(resourceType) || Immutable.List();
assets = assets.map(function(assetFile) {
if (LocationUtils.isExternal(assetFile)) {
return {
url: assetFile
};
} else {
return {
path: LocationUtils.normalize(path.join(npmId, assetFile))
};
}
});
list = list.concat(assets);
result = result.set(resourceType, list);
});
return result;
}, Immutable.Map());
}
module.exports = listResources;