summaryrefslogtreecommitdiffstats
path: root/lib/generate/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/generate/index.js')
-rw-r--r--lib/generate/index.js76
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