mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-23 19:06:31 +00:00
92 lines
2.3 KiB
JavaScript
92 lines
2.3 KiB
JavaScript
var path = require('path');
|
|
|
|
var WebsiteGenerator = require('../website');
|
|
var JSONUtils = require('../../json');
|
|
var Templating = require('../../templating');
|
|
var Promise = require('../../utils/promise');
|
|
var error = require('../../utils/error');
|
|
var command = require('../../utils/command');
|
|
var writeFile = require('../helper/writeFile');
|
|
|
|
var getConvertOptions = require('./getConvertOptions');
|
|
var SUMMARY_FILE = 'SUMMARY.html';
|
|
|
|
/**
|
|
Write the SUMMARY.html
|
|
|
|
@param {Output}
|
|
@return {Output}
|
|
*/
|
|
function writeSummary(output) {
|
|
var options = output.getOptions();
|
|
var prefix = options.get('prefix');
|
|
|
|
var filePath = SUMMARY_FILE;
|
|
var engine = WebsiteGenerator.createTemplateEngine(output, filePath);
|
|
var context = JSONUtils.encodeOutput(output);
|
|
|
|
// Render the theme
|
|
return Templating.renderFile(engine, prefix + '/summary.html', context)
|
|
|
|
// Write it to the disk
|
|
.then(function(tplOut) {
|
|
return writeFile(output, filePath, tplOut.getContent());
|
|
});
|
|
}
|
|
|
|
/**
|
|
Generate the ebook file as "index.pdf"
|
|
|
|
@param {Output}
|
|
@return {Output}
|
|
*/
|
|
function runEbookConvert(output) {
|
|
var logger = output.getLogger();
|
|
var options = output.getOptions();
|
|
var format = options.get('format');
|
|
var outputFolder = output.getRoot();
|
|
|
|
if (!format) {
|
|
return Promise(output);
|
|
}
|
|
|
|
return getConvertOptions(output)
|
|
.then(function(options) {
|
|
var cmd = [
|
|
'ebook-convert',
|
|
path.resolve(outputFolder, SUMMARY_FILE),
|
|
path.resolve(outputFolder, 'index.' + format),
|
|
command.optionsToShellArgs(options)
|
|
].join(' ');
|
|
|
|
return command.exec(cmd)
|
|
.progress(function(data) {
|
|
logger.debug(data);
|
|
})
|
|
.fail(function(err) {
|
|
if (err.code == 127) {
|
|
throw error.RequireInstallError({
|
|
cmd: 'ebook-convert',
|
|
install: 'Install it from Calibre: https://calibre-ebook.com'
|
|
});
|
|
}
|
|
|
|
throw error.EbookError(err);
|
|
});
|
|
})
|
|
.thenResolve(output);
|
|
}
|
|
|
|
/**
|
|
Finish the generation, generates the SUMMARY.html
|
|
|
|
@param {Output}
|
|
@return {Output}
|
|
*/
|
|
function onFinish(output) {
|
|
return writeSummary(output)
|
|
.then(runEbookConvert);
|
|
}
|
|
|
|
module.exports = onFinish;
|