diff options
-rw-r--r-- | lib/generate/ebook/index.js | 54 | ||||
-rw-r--r-- | lib/generate/index.js | 1 |
2 files changed, 55 insertions, 0 deletions
diff --git a/lib/generate/ebook/index.js b/lib/generate/ebook/index.js new file mode 100644 index 0000000..8d81bfc --- /dev/null +++ b/lib/generate/ebook/index.js @@ -0,0 +1,54 @@ +var util = require("util"); +var path = require("path"); +var Q = require("q"); +var _ = require("lodash"); +var exec = require('child_process').exec; + +var fs = require("../fs"); +var parse = require("../../parse"); +var BaseGenerator = require("../page"); + +/* + * This generator inherits from the single page generator + * and convert the page output to ebook + */ +var Generator = function() { + BaseGenerator.apply(this, arguments); + + // Options for eBook generation + this.options = _.defaults(this.options, { + extension: "epub" + }); +}; +util.inherits(Generator, BaseGenerator); + +Generator.prototype.finish = function() { + var that = this; + + return BaseGenerator.prototype.finish.apply(this) + .then(function() { + var d = Q.defer(); + + var command = [ + "ebook-convert", + path.join(that.options.output, "index.html"), + path.join(that.options.output, "index."+that.options.extension) + ].join(" "); + + exec(command, function (error, stdout, stderr) { + if (error) { + if (error.code == 127) { + error.message = "Need to install ebook-convert from Calibre"; + } else { + error.message = error.message + " "+stdout; + } + return d.reject(error); + } + d.resolve(); + }); + + return d.promise; + }); +}; + +module.exports = Generator; diff --git a/lib/generate/index.js b/lib/generate/index.js index b0456f7..03d826c 100644 --- a/lib/generate/index.js +++ b/lib/generate/index.js @@ -11,6 +11,7 @@ var generators = { "site": require("./site"), "page": require("./page"), "pdf": require("./pdf"), + "ebook": require("./ebook"), "json": require("./json") }; |