diff options
Diffstat (limited to 'lib/generate/index.js')
-rw-r--r-- | lib/generate/index.js | 76 |
1 files changed, 51 insertions, 25 deletions
diff --git a/lib/generate/index.js b/lib/generate/index.js index 6b75dea..444f75f 100644 --- a/lib/generate/index.js +++ b/lib/generate/index.js @@ -1,9 +1,9 @@ var Q = require("q"); var _ = require("lodash"); var path = require("path"); -var swig = require('swig'); var tmp = require('tmp'); +var swig = require('./template'); var fs = require("./fs"); var parse = require("../parse"); var Plugin = require("./plugin"); @@ -11,7 +11,6 @@ var Plugin = require("./plugin"); var generators = { "site": require("./site"), "page": require("./page"), - "pdf": require("./pdf"), "ebook": require("./ebook"), "json": require("./json") }; @@ -26,13 +25,23 @@ var containsFiles = function(dir, files) { .then(_.all); }; +// TEst if generator exists +var checkGenerator = function(options) { + if (!generators[options.generator]) { + return Q.reject(new Error("Invalid generator (availables are: "+_.keys(generators).join(", ")+")")); + } + return Q(); +}; // Create the generator and load plugins var loadGenerator = function(options) { - var generator = new generators[options.generator](options); + return checkGenerator(options) + .then(function() { + var generator = new generators[options.generator](options); - return generator.loadPlugins() - .then(_.constant(generator)); + return generator.loadPlugins() + .then(_.constant(generator)); + }); }; @@ -45,7 +54,7 @@ var generate = function(options) { "output": null, // Config file (relative to input) - "configFile": "book.json", + "configFile": "book", // Output generator "generator": "site", @@ -79,27 +88,20 @@ var generate = function(options) { return Q.reject(new Error("Need option input (book input directory)")); } - // Ensure generator exists - if (!generators[options.generator]) { - return Q.reject(new Error("Invalid generator (availables are: "+_.keys(generators).join(", "))); - } - // Check files to get folder type (book, multilanguage book or neither) - return Q() + return checkGenerator(options) // Read config file .then(function() { - return fs.readFile(path.resolve(options.input, options.configFile)) - .then(function(_config) { - // Extend current config - _config = JSON.parse(_config); - _config = _.omit(_config, 'input', 'configFile', 'defaultsPlugins'); - - _.extend(options, _config); - }, function() { + try { + var _config = require(path.resolve(options.input, options.configFile)); + + _.extend(options, _.omit(_config, 'input', 'configFile', 'defaultsPlugins')); + } + catch(err) { // No config file: not a big deal return Q(); - }); + } }) // Read readme @@ -134,8 +136,12 @@ var generateMultiLang = function(options) { var langsSummary; options.output = options.output || path.join(options.input, "_book"); + return checkGenerator(options) + // Multi-languages book - return fs.readFile(path.join(options.input, "LANGS.md"), "utf-8") + .then(function() { + return fs.readFile(path.join(options.input, "LANGS.md"), "utf-8") + }) // Clean output folder .then(function(_langsSummary) { @@ -155,7 +161,9 @@ var generateMultiLang = function(options) { return prev.then(function() { return generate(_.extend({}, options, { input: path.join(options.input, entry.path), - output: path.join(options.output, entry.path) + output: path.join(options.output, entry.path), + originalInput: options.input, + originalOutput: options.output })); }) }, Q()); @@ -170,6 +178,17 @@ var generateMultiLang = function(options) { return generator.langsIndex(options.langsSummary); }) + // Copy cover file + .then(function() { + return Q.all([ + fs.copy(path.join(options.input, "cover.jpg"), path.join(options.output, "cover.jpg")), + fs.copy(path.join(options.input, "cover_small.jpg"), path.join(options.output, "cover_small.jpg")) + ]) + .fail(function() { + return Q(); + }) + }) + // Return options to caller .then(_.constant(options)); }; @@ -205,8 +224,15 @@ var generateBook = function(options) { options.github = null; return null; } else if(options.github) { - // Git already specified in options - return options.github; + // Git already specified in options + options.github = ( + // Support URLs in "github" entry of book.json + parse.git.githubID(options.github) || + + // Fallback + options.github + ); + return; } // Try auto detecting |