summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-04-29 15:09:11 +0200
committerSamy Pessé <samypesse@gmail.com>2016-04-29 15:09:11 +0200
commit07a5daefb025868ecf41054713a18d50e01511c0 (patch)
tree1a90b356589c0e23797ce8a06a33ae06596e75ab
parent0ed524bce508f3f9ebb475d06c662cad948e224a (diff)
downloadgitbook-07a5daefb025868ecf41054713a18d50e01511c0.zip
gitbook-07a5daefb025868ecf41054713a18d50e01511c0.tar.gz
gitbook-07a5daefb025868ecf41054713a18d50e01511c0.tar.bz2
Generate SUMMARY.html for ebook output
-rw-r--r--lib/output/__tests__/ebook.js16
-rw-r--r--lib/output/createTemplateEngine.js2
-rw-r--r--lib/output/ebook/index.js4
-rw-r--r--lib/output/ebook/onFinish.js25
-rw-r--r--lib/output/ebook/onInit.js4
-rw-r--r--lib/output/ebook/onPage.js4
-rw-r--r--lib/output/website/index.js16
7 files changed, 50 insertions, 21 deletions
diff --git a/lib/output/__tests__/ebook.js b/lib/output/__tests__/ebook.js
new file mode 100644
index 0000000..dabf360
--- /dev/null
+++ b/lib/output/__tests__/ebook.js
@@ -0,0 +1,16 @@
+var generateMock = require('../generateMock');
+var EbookGenerator = require('../ebook');
+
+describe('EbookGenerator', function() {
+
+ pit('should generate a SUMMARY.html', function() {
+ return generateMock(EbookGenerator, {
+ 'README.md': 'Hello World'
+ })
+ .then(function(folder) {
+ expect(folder).toHaveFile('SUMMARY.html');
+ expect(folder).toHaveFile('index.html');
+ });
+ });
+});
+
diff --git a/lib/output/createTemplateEngine.js b/lib/output/createTemplateEngine.js
index 523c850..05718ea 100644
--- a/lib/output/createTemplateEngine.js
+++ b/lib/output/createTemplateEngine.js
@@ -35,6 +35,8 @@ function createTemplateEngine(output) {
filters: filters,
blocks: blocks,
loader: loader
+
+ // todo: build context for filters/blocks
});
}
diff --git a/lib/output/ebook/index.js b/lib/output/ebook/index.js
index 3aaa7e7..344a6c5 100644
--- a/lib/output/ebook/index.js
+++ b/lib/output/ebook/index.js
@@ -1,7 +1,7 @@
var extend = require('extend');
-var websiteGenerator = require('../website');
+var WebsiteGenerator = require('../website');
-module.exports = extend({}, websiteGenerator, {
+module.exports = extend({}, WebsiteGenerator, {
name: 'ebook',
onInit: require('./onInit'),
onPage: require('./onPage'),
diff --git a/lib/output/ebook/onFinish.js b/lib/output/ebook/onFinish.js
index 81fa45d..e82f679 100644
--- a/lib/output/ebook/onFinish.js
+++ b/lib/output/ebook/onFinish.js
@@ -1,20 +1,29 @@
-var websiteGenerator = require('../website');
+var WebsiteGenerator = require('../website');
+var JSONUtils = require('../../json');
+var Templating = require('../../templating');
+var writeFile = require('../helper/writeFile');
/**
- Finish the generation, generate the ebook file using ebook-convert
+ Finish the generation, generates the SUMMARY.html
@param {Output}
@return {Output}
*/
function onFinish(output) {
- return websiteGenerator.onFinish(output)
- .then(function(resultOutput) {
+ var book = output.getBook();
+ var options = output.getOptions();
+ var prefix = options.get('prefix');
- // todo:
- // - render SUMMARY.html
- // - Build ebook using ebook-convert
+ var filePath = 'SUMMARY.html';
+ var engine = WebsiteGenerator.createTemplateEngine(output, filePath);
+ var context = JSONUtils.encodeOutput(output);
- return resultOutput;
+ // Render the theme
+ return Templating.renderFile(engine, prefix + '/SUMMARY.html', context)
+
+ // Write it to the disk
+ .then(function(html) {
+ return writeFile(output, filePath, html);
});
}
diff --git a/lib/output/ebook/onInit.js b/lib/output/ebook/onInit.js
index 9cee141..402e318 100644
--- a/lib/output/ebook/onInit.js
+++ b/lib/output/ebook/onInit.js
@@ -1,4 +1,4 @@
-var websiteGenerator = require('../website');
+var WebsiteGenerator = require('../website');
/**
Initialize the generator
@@ -7,7 +7,7 @@ var websiteGenerator = require('../website');
@return {Output}
*/
function onInit(output) {
- return websiteGenerator.onInit(output)
+ return WebsiteGenerator.onInit(output)
.then(function(resultOutput) {
var options = resultOutput.getOptions();
diff --git a/lib/output/ebook/onPage.js b/lib/output/ebook/onPage.js
index 13edf17..21fd34c 100644
--- a/lib/output/ebook/onPage.js
+++ b/lib/output/ebook/onPage.js
@@ -1,4 +1,4 @@
-var website = require('../website');
+var WebsiteGenerator = require('../website');
var Modifiers = require('../modifiers');
/**
@@ -17,7 +17,7 @@ function onPage(output, page) {
// Write page using website generator
.then(function(resultPage) {
- return website.onPage(output, resultPage);
+ return WebsiteGenerator.onPage(output, resultPage);
});
}
diff --git a/lib/output/website/index.js b/lib/output/website/index.js
index 0c9fed8..000d417 100644
--- a/lib/output/website/index.js
+++ b/lib/output/website/index.js
@@ -1,10 +1,12 @@
module.exports = {
- name: 'website',
- State: require('./state'),
- Options: require('./options'),
- onInit: require('./onInit'),
- onFinish: require('./onFinish'),
- onPage: require('./onPage'),
- onAsset: require('./onAsset')
+ name: 'website',
+ State: require('./state'),
+ Options: require('./options'),
+ onInit: require('./onInit'),
+ onFinish: require('./onFinish'),
+ onPage: require('./onPage'),
+ onAsset: require('./onAsset'),
+ onAsset: require('./onAsset'),
+ createTemplateEngine: require('./createTemplateEngine')
};