diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-02-24 18:07:17 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-02-24 18:07:17 +0100 |
commit | 0b4a6b5362795f25594aabb458378df1599e4dbd (patch) | |
tree | f5511e33d640cd9493363414907f4e524b1e6029 /lib | |
parent | 3a0636046ea0b9bc898438d502e3bf80f6c4d312 (diff) | |
download | gitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.zip gitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.tar.gz gitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.tar.bz2 |
Output folder is an option for FolderOutput
Diffstat (limited to 'lib')
-rw-r--r-- | lib/book.js | 9 | ||||
-rw-r--r-- | lib/cli/helper.js | 49 | ||||
-rw-r--r-- | lib/cli/index.js | 5 | ||||
-rw-r--r-- | lib/config/index.js | 1 | ||||
-rw-r--r-- | lib/output/ebook.js | 3 | ||||
-rw-r--r-- | lib/output/folder.js | 12 | ||||
-rw-r--r-- | lib/plugins/plugin.js | 2 |
7 files changed, 60 insertions, 21 deletions
diff --git a/lib/book.js b/lib/book.js index d8c6542..5fa3075 100644 --- a/lib/book.js +++ b/lib/book.js @@ -48,6 +48,10 @@ function Book(opts) { // If multi-lingual, book can have a parent this.parent = opts.parent; + if (this.parent) { + this.language = path.relative(this.parent.root, this.root); + console.log(this.language); + } // A book is linked to an fs, to access its content this.fs = opts.fs; @@ -187,10 +191,7 @@ Book.prototype.parse = function() { that.books.push(langBook); - return langBook.parse() - .then(function() { - langBook.config.set('output', path.join(that.config.get('output'), lang.id)); - }); + return langBook.parse(); }); } diff --git a/lib/cli/helper.js b/lib/cli/helper.js index e62c8d9..4cd7f21 100644 --- a/lib/cli/helper.js +++ b/lib/cli/helper.js @@ -4,6 +4,7 @@ var path = require('path'); var Book = require('../book'); var NodeFS = require('../fs/node'); var Logger = require('../utils/logger'); +var Promise = require('../utils/promise'); var fs = require('../utils/fs'); var JSONOutput = require('../output/json'); var WebsiteOutput = require('../output/website'); @@ -54,7 +55,16 @@ function bookCmd(fn) { function outputCmd(fn) { return bookCmd(function(book, args, kwargs) { var Out = FORMATS[kwargs.format]; - return fn(new Out(book), args); + var outputFolder = undefined; + + // Set output folder + if (args[0]) { + outputFolder = path.resolve(process.cwd(), args[0]); + } + + return fn(new Out(book, { + root: outputFolder + }), args); }); } @@ -69,24 +79,45 @@ function ebookCmd(format) { exec: bookCmd(function(book, args, kwargs) { return fs.tmpDir() .then(function(dir) { - var outputFile = path.resolve(process.cwd(), args[1] || 'book.' + format); + var ext = '.'+format; + var outputFile = path.resolve(process.cwd(), args[1] || ('book' + ext)); var output = new EBookOutput(book, { + root: dir, format: format }); return output.book.parse() .then(function() { - // Set output folder - output.book.config.set('output', dir); return output.generate(); }) - // Copy the ebook file + // Copy the ebook files .then(function() { - return fs.copy( - path.resolve(dir, 'index.' + format), - outputFile - ); + if (output.book.isMultilingual()) { + return Promise.serie(output.book.langs.list(), function(lang) { + var _outputFile = path.join( + path.dirname(outputFile), + path.basename(outputFile, ext) + '_' + lang.id + ext + ); + + return fs.copy( + path.resolve(dir, lang.id, 'index' + ext), + _outputFile + ); + }) + .thenResolve(output.book.langs.count()); + } else { + return fs.copy( + path.resolve(dir, 'index' + ext), + outputFile + ).thenResolve(1); + } + }) + .then(function(n) { + output.book.log.info.ok(n+' file(s) generated'); + + output.book.log.info.ln('cleaning up... '); + return output.book.log.info.promise(fs.rmDir(dir)); }); }); }) diff --git a/lib/cli/index.js b/lib/cli/index.js index 05f97b0..33df69f 100644 --- a/lib/cli/index.js +++ b/lib/cli/index.js @@ -64,11 +64,6 @@ module.exports = { exec: helper.outputCmd(function(output, args, kwargs) { return output.book.parse() .then(function() { - // Set output folder - if (args[0]) { - output.book.config.set('output', path.resolve(process.cwd(), args[0])); - } - return output.generate(); }); }) diff --git a/lib/config/index.js b/lib/config/index.js index 72b2026..8bb93ad 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -56,7 +56,6 @@ Config.prototype.load = function() { } } - that.options.output = that.options.output || that.book.resolve('_book'); that.options.plugins = plugins.toList(that.options.plugins); that.options.defaultsPlugins = plugins.toList(that.options.defaultsPlugins || '', false); that.options.plugins = _.union(that.options.plugins, that.options.defaultsPlugins); diff --git a/lib/output/ebook.js b/lib/output/ebook.js index 801d058..cd5e960 100644 --- a/lib/output/ebook.js +++ b/lib/output/ebook.js @@ -23,6 +23,9 @@ EbookOutput.prototype.name = 'ebook'; // Finish generation, create ebook using ebook-convert EbookOutput.prototype.finish = function() { var that = this; + if (that.book.isMultilingual()) { + return EbookOutput.super_.prototype.finish.apply(that); + } return Promise() .then(function() { diff --git a/lib/output/folder.js b/lib/output/folder.js index f5b7063..f4e9941 100644 --- a/lib/output/folder.js +++ b/lib/output/folder.js @@ -17,6 +17,8 @@ module.exports = function folderOutput(Base) { function FolderOutput() { Base.apply(this, arguments); + + this.opts.root = path.resolve(this.opts.root || this.book.resolve('_book')); } util.inherits(FolderOutput, Base); @@ -60,12 +62,20 @@ module.exports = function folderOutput(Base) { }); }; + // Prepare output for a language book + FolderOutput.prototype.onLanguageBook = function(book) { + return new this.constructor(book, _.extend(this.opts, { + + // Language output should be output in sub-directory of output + root: path.resolve(this.root(), book.language) + }), this); + }; // ----- Utility methods ----- // Return path to the root folder FolderOutput.prototype.root = function() { - return path.resolve(process.cwd(), this.book.config.get('output')); + return this.opts.root; }; // Resolve a file in the output directory diff --git a/lib/plugins/plugin.js b/lib/plugins/plugin.js index 41be518..5329c66 100644 --- a/lib/plugins/plugin.js +++ b/lib/plugins/plugin.js @@ -113,7 +113,7 @@ BookPlugin.prototype.load = function(folder) { that.book.config.set(that.getConfigKey(), config); }); - this.log.info('loading plugin "' + this.id + '" ...'); + this.log.info('loading plugin "' + this.id + '"... '); return this.log.info.promise(p); }; |