summaryrefslogtreecommitdiffstats
path: root/lib/output/website
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output/website')
-rw-r--r--lib/output/website/copyPluginAssets.js12
-rw-r--r--lib/output/website/onInit.js2
-rw-r--r--lib/output/website/onPage.js16
-rw-r--r--lib/output/website/prepareResources.js54
-rw-r--r--lib/output/website/state.js9
5 files changed, 81 insertions, 12 deletions
diff --git a/lib/output/website/copyPluginAssets.js b/lib/output/website/copyPluginAssets.js
index 9dc876f..9150636 100644
--- a/lib/output/website/copyPluginAssets.js
+++ b/lib/output/website/copyPluginAssets.js
@@ -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 pluginRoot = plugin.getPath();
+ var pluginResources = resources.get(plugin.getName());
- var assetsFolder = resources.get('assets');
+ var assetsFolder = pluginResources.get('assets');
var assetOutputFolder = path.join(outputRoot, 'gitbook', plugin.getNpmID());
if (!assetsFolder) {
diff --git a/lib/output/website/onInit.js b/lib/output/website/onInit.js
index 979a90d..3465eef 100644
--- a/lib/output/website/onInit.js
+++ b/lib/output/website/onInit.js
@@ -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);
}
diff --git a/lib/output/website/onPage.js b/lib/output/website/onPage.js
index 64b4e04..16a5c39 100644
--- a/lib/output/website/onPage.js
+++ b/lib/output/website/onPage.js
@@ -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 = {
diff --git a/lib/output/website/prepareResources.js b/lib/output/website/prepareResources.js
new file mode 100644
index 0000000..4e6835d
--- /dev/null
+++ b/lib/output/website/prepareResources.js
@@ -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; \ No newline at end of file
diff --git a/lib/output/website/state.js b/lib/output/website/state.js
index 99e7f04..cb8f750 100644
--- a/lib/output/website/state.js
+++ b/lib/output/website/state.js
@@ -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;