summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-02-24 18:07:17 +0100
committerSamy Pessé <samypesse@gmail.com>2016-02-24 18:07:17 +0100
commit0b4a6b5362795f25594aabb458378df1599e4dbd (patch)
treef5511e33d640cd9493363414907f4e524b1e6029
parent3a0636046ea0b9bc898438d502e3bf80f6c4d312 (diff)
downloadgitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.zip
gitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.tar.gz
gitbook-0b4a6b5362795f25594aabb458378df1599e4dbd.tar.bz2
Output folder is an option for FolderOutput
-rw-r--r--lib/book.js9
-rw-r--r--lib/cli/helper.js49
-rw-r--r--lib/cli/index.js5
-rw-r--r--lib/config/index.js1
-rw-r--r--lib/output/ebook.js3
-rw-r--r--lib/output/folder.js12
-rw-r--r--lib/plugins/plugin.js2
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);
};