diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-25 22:30:41 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-25 22:30:41 +0200 |
commit | ab2ebefe2bb6dee75e064c1ad572749e3f8104d1 (patch) | |
tree | b6a09abe8726a04a57f69580bad3136dd5d4de60 | |
parent | c34a9f6213c204c43c78dd691a5295d7e5a757e8 (diff) | |
download | gitbook-ab2ebefe2bb6dee75e064c1ad572749e3f8104d1.zip gitbook-ab2ebefe2bb6dee75e064c1ad572749e3f8104d1.tar.gz gitbook-ab2ebefe2bb6dee75e064c1ad572749e3f8104d1.tar.bz2 |
Copy resources from plugins to output folder
-rw-r--r-- | lib/models/plugin.js | 17 | ||||
-rw-r--r-- | lib/output/website/onInit.js | 99 |
2 files changed, 96 insertions, 20 deletions
diff --git a/lib/models/plugin.js b/lib/models/plugin.js index ed7ad82..372558b 100644 --- a/lib/models/plugin.js +++ b/lib/models/plugin.js @@ -74,6 +74,23 @@ Plugin.prototype.getHooks = function() { }; /** + Return infos about resources for a specific type + + @param {String} type + @return {Map<String:Mixed>} +*/ +Plugin.prototype.getResources = function(type) { + if (type != 'website' && type != 'ebook') { + throw new Error('Invalid assets type ' + type); + } + + var content = this.getContent(); + return (content.get(type) + || (type == 'website'? content.get('book') : null) + || Immutable.Map()); +}; + +/** Return map of filters @return {Map<String:Function>} */ diff --git a/lib/output/website/onInit.js b/lib/output/website/onInit.js index 632c6d6..d348984 100644 --- a/lib/output/website/onInit.js +++ b/lib/output/website/onInit.js @@ -9,45 +9,104 @@ var fs = require('../../utils/fs'); */ function onInit(output) { return Promise(output) - .then(copyPluginAssets) + .then(copyAllPluginAssets) .thenResolve(output); } /** - Copy all assets from plugins + Copy all assets from plugins. + Assets are files stored in "_assets" + nd resources declared in the plugin itself. @param {Output} @return {Promise} */ -function copyPluginAssets(output) { - var options = output.getOptions(); +function copyAllPluginAssets(output) { var plugins = output.getPlugins(); + + return Promise.forEach(plugins, function(plugin) { + return copyAssets(output, plugin) + .then(function() { + return copyResources(output, plugin); + }); + }); +} + +/** + Copy assets from a plugin + + @param {Plugin} + @return {Promise} +*/ +function copyAssets(output, plugin) { var logger = output.getLogger(); + var pluginRoot = plugin.getPath(); + var options = output.getOptions(); var outputRoot = options.get('root'); var assetOutputFolder = path.join(outputRoot, 'gitbook'); var prefix = options.get('prefix'); - return Promise.forEach(plugins, function(plugin) { - var pluginRoot = plugin.getPath(); - var assetFolder = path.join(pluginRoot, ASSET_FOLDER, prefix); + var assetFolder = path.join(pluginRoot, ASSET_FOLDER, prefix); - if (!fs.existsSync(assetFolder)) { - return; + if (!fs.existsSync(assetFolder)) { + return Promise(); + } + + logger.debug.ln('copy assets from theme', assetFolder); + return fs.copyDir( + assetFolder, + assetOutputFolder, + { + deleteFirst: false, + overwrite: true, + confirm: true } + ); +} - logger.debug.ln('copy assets from theme', assetFolder); - return fs.copyDir( - assetFolder, - assetOutputFolder, - { - deleteFirst: false, - overwrite: true, - confirm: true - } - ); - }); +/** + Copy resources from a plugin + + @param {Plugin} + @return {Promise} +*/ +function copyResources(output, plugin) { + var logger = output.getLogger(); + + var options = output.getOptions(); + var prefix = options.get('prefix'); + var outputRoot = options.get('root'); + + var pluginRoot = plugin.getPath(); + var resources = plugin.getResources(prefix); + + var assetsFolder = resources.get('assets'); + var assetOutputFolder = path.join(outputRoot, 'gitbook', plugin.getNpmID()); + + if (!assetsFolder) { + return Promise(); + } + + // Resolve assets folder + assetsFolder = path.resolve(pluginRoot, assetsFolder); + if (!fs.existsSync(assetsFolder)) { + logger.warn.ln('assets folder for plugin "' + plugin.getName() + '" doesn\'t exist'); + return Promise(); + } + + logger.debug.ln('copy resources from plugin', assetsFolder); + + return fs.copyDir( + assetsFolder, + assetOutputFolder, + { + deleteFirst: false, + overwrite: true, + confirm: true + } + ); } module.exports = onInit; |