diff options
Diffstat (limited to 'lib/output/website')
-rw-r--r-- | lib/output/website/copyPluginAssets.js | 12 | ||||
-rw-r--r-- | lib/output/website/onInit.js | 2 | ||||
-rw-r--r-- | lib/output/website/onPage.js | 16 | ||||
-rw-r--r-- | lib/output/website/prepareResources.js | 54 | ||||
-rw-r--r-- | lib/output/website/state.js | 9 |
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; |